if文

6.2 if文

 条件分岐で一番基本的なパターンとなるのが、if(イフ)文です。これは英語の「if」という単語の意味の通り、「もし○○○ならば、×××する」という条件分岐を作る制御文です。if文は条件に応じて様々な流れを作ることができますが、この節では、最も単純なパターンについて解説していきます。

6.2.1 if文の基本構文

 if文の基本構文は下記のようになります。

 書式:if基本構文

  if( 条件式 ){  
    処理       
  }          


 この場合は、もし条件式が合っていたら(条件を満たしたら)、if文内の処理を行う、ということになります。

◉ポイント

・ 条件式を判定した結果は、必ずtrueかfalseのどちらかになる。

 プログラムの流れを図にしたものをフローチャートと呼びます。if基本構文の流れを表したフローチャートが図 6.2.1です。

図6.2.1 if基本構文のフローチャート

◉ポイント

・ ある条件が成立する時だけ処理を実行する場合、if文を使用します。

6.2.2 関係(比較)演算子とは

 条件式を書くためには、関係演算子(比較演算子ともいう)の知識が必要になります。
 関係演算子とは、式の左辺と右辺の関係を表す演算子です。
 例えば算数では、「1 + 2 = 3」のような式が成立しますが、これは「1+2」と「3」が同じであることを関係演算子「=」で表しているとも言えます。
 Javaの世界では、下の表 6.2.1にある関係演算子を使うことが決まっています。

関係演算子

使用例

意味

==

a==b

aとbは等ければtrue、それ以外はfalse

!=

a!=b

aとbは等しくなければtrue、それ以外はfalse

>

a>b

aがbより大きいならtrue、それ以外はfalse

<

a<b

aがbより小さいならtrue、それ以外はfalse

>=

a>=b

aがb以上ならtrue、それ以外はfalse

<=

a<=b

aがb以下ならtrue、それ以外はfalse

 前節のif文の条件式に、この関係演算子を当てはめてみましょう。

  if( a == b ){  
    処理       
  }          

 この場合は、もしaとbが等しければ(a==bがtrueならば)、処理を行うということになります。
 フローチャートで表すと図 6.2.2のようになります。

図6.2.2 if基本構文と関係演算子のフローチャート

 文字列の比較

  文字列.equals(文字列)  

 文字列の比較は、関係演算子「==」を使って行なうことはできません。文字列を比較するときには、「==」や「!=」ではなく、「equalsメソッド」を使わなければなりません。
 この後、当テキストの6.2.6項で、equalsメソッドを使ったプログラムを作成します。

6.2.3 if文の条件式が成立するプログラム

 関係演算子「= =」を使った条件式が成立し、メッセージが表示されることを確認します。

① ソース・フォルダー      :myproj_super_intro/src
② パッケージ          :jp.co.f1.superintro.ch06
③ 名前             :IfStatement1
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ IfStatement1.java

 package jp.co.f1.superintro.ch06;
 
 public class IfStatement1 {
 
 	public static void main(String[] args) {
 
 		// 比較用の値を管理する変数の宣言と初期化
 		int a = 5;
 		int b = 5;
  
  		System.out.println("-- if文開始 --");
  
  		if (a == b) {
  			System.out.println("変数aと変数bは等しい。");
  		}
  
  		System.out.println("-- if文終了 --");
  
  	}
  
  }
        

実行結果

解説

 8、9行目ではint型の変数aとbを宣言し、それぞれの変数に同じ値5を代入しています。

   8: int a = 5;
   9: int b = 5;

 13~15行目までがif文です。if文の「{」と「}」で囲まれた範囲は、「ifブロック」という呼び方をします。ifブロック内がインデントされていることを確認して下さい。このように、ブロック内の処理に対してインデントが行われていると、そこに記述されている処理が一目でわかりやすくなります。
 ブロック内をインデントすることは、Javaのコーディングの慣例です。

   13: if (a == b) {
   14:   System.out.println("変数aと変数bは等しい。");
   15: }

 13行目に記述された条件式「a == b」はa=5、b=5と、両方の値が同じなので、条件が満たされます。そのためifブロック内である14行目が実行され、「変数aと変数bは等しい」と表示されます。

図6.2.3 IfStatement1のフローチャート

6.2.4 if文の条件式が成立しないプログラム

 次に、条件が満たされない場合(false)を見ていきましょう。
 関係演算子「= =」を使った条件式が成立せず、メッセージが出力されないことを確認します。

① ソース・フォルダー      :myproj_super_intro/src
② パッケージ          :jp.co.f1.superintro.ch06
③ 名前             :IfStatement2
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ IfStatement2.java

 package jp.co.f1.superintro.ch06;
 
 public class IfStatement2 {
 
 	public static void main(String[] args) {
 
 		// 比較用の値を管理する変数の宣言と初期化
 		int a = 4;
 		int b = 5;
  
  		System.out.println("-- if文開始 --");
  
  		if (a == b) {
  			System.out.println("変数aと変数bは等しい。");
  		}
  		System.out.println("-- if文終了 --");
  
  	}
  
  }
        

実行結果

解説

 8行目で、int型の変数aを宣言し、4を代入します。9行目では、int型の変数bを宣言し、5を代入します。

   8: int a = 4;
   9: int b = 5;

 変数aには4、変数bには5が代入されているので、「a == b」、つまり「4 == 5」という条件は成立せず、ifブロック内、つまり14行目は実行されません。

   13: if (a == b) {
   14:   System.out.println("変数aと変数bは等しい。");
   15: }

 このサンプルプログラムのフローチャートを図 6.2.4に示します。

図6.2.4 IfStatement2のフローチャート

6.2.5 !=演算子を用いた条件式が成立するプログラム

 関係演算子「! =」を使った条件式が成立し、メッセージが出力されることを確認します。

① ソース・フォルダー      :myproj_super_intro/src
② パッケージ          :jp.co.f1.superintro.ch06
③ 名前             :IfStatement3
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ IfStatement3.java

package jp.co.f1.superintro.ch06;

public class IfStatement3 {

	public static void main(String[] args) {

		// 比較用の値を管理する変数の宣言と初期化
		int a = 2;
		int b = 5;
 
 		System.out.println("-- if文開始 --");
 
 		if (a != b) {
 			System.out.println("変数aと変数bは等しくない。");
 		}
 
 		System.out.println("-- if文終了 --");
 
 	}
 
 }
        

実行結果

解説

 前項のプログラムIfStatement2.javaと比べると、13行目の条件式の記述が変更されています。関係演算子「!=」は、左辺と右辺が等しくない場合にtrueとなります。
 変数aには2、変数bには5が代入されています。aとbを比較すると等しくないので、この条件式はtrueとなります。

   13: if (a != b) {
   14:   System.out.println("変数aと変数bは等しくない。");
   15: }

 このサンプルプログラムのフローチャートを図 6.2.5に示します。

図6.2.5 IfStatement3のフローチャート

6.2.6 文字列を比較するequalsメソッドを使ったプログラム

 いままでのプログラムでは数値同士を比較してきました。次のプログラムでは、equalsメソッドを使用して、2つの「文字列」を比較する方法を確認してみます。

① ソース・フォルダー      :myproj_super_intro/src
② パッケージ          :jp.co.f1.superintro.ch06
③ 名前             :EqualsMethod
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ EqualsMethod.java

package jp.co.f1.superintro.ch06;

public class EqualsMethod {

	public static void main(String[] args) {

		//比較用の文字列を管理する変数の宣言と初期化
		String str = "テスト";

 		System.out.println("-- if文開始 --");
 
 		if (str.equals("テスト")) {
 			System.out.println("String型の変数strと文字列\"テスト\"とは意味的に等しい。");
 		}
 
 		System.out.println("-- if文終了 --");
 
 	}
 
 }
        

実行結果

解説

 12行目では、文字列の比較をします。数値型同士では==演算子を使って等しい数値であるかを比較しますが、文字列の比較ではequalsメソッドを使用します。
 String型(文字列型)の変数strの値である”テスト”と”テスト”という文字列は意味的に等しいので、条件は満たされます。そのため、13行目が実行されます。
 13行目の文字列の中に含まれている「\”」という記述は、エスケープシークエンスと言いいます。これは、文字列を囲う「”(ダブルクォーテーション)」のような特殊な文字を、文字列として表示するために使います。実行結果を見ると、13行目で「String型の変数strと文字列”テスト”とは意味的に等しい。」と、「”」が文字列として表示されています。

   12: if (str.equals("テスト")) {
   13:   System.out.println("String型の変数strと文字列\"テスト\"とは意味的に等しい。");
   14: }

 このサンプルプログラムのフローチャートは、図 6.2.6に示します。

図6.2.6 EqualsMethodのフローチャート

  エスケープシークエンスとは

 ダブルクォーテーション( ” )を表示させたいときは、頭に半角の「 \ 」をつけます。また、そのほかに「 \ 」や「 ‘ 」などを表示させたい場合も、同じように頭に「\」を付けます。このように通常には表現できない特殊文字を、前に「¥」をつけることによって表したものを「エスケープシーケンス」と言います。
 表 6.2.2は、エスケープシークエンスの一部を表にまとめたものです。

表示させる文字

記述

\または\

\\

‘(シングルクォーテーション)

\’

“(ダブルクォーテーション)

\”

タブ文字

\t

表 6.2.2 主なエスケープシークエンス一覧

NEXT>> 6.3 if-else文