メディアプラネット 中島省吾

条件分岐

条件分岐とは

 条件が成り立つかを判断し,その結果によって処理を変えることを「条件分岐」といいます。条件は,式を評価することで判断します。条件分岐を行うにはif文とswitch文を使うことができます。

if文

 if文は,条件判断の部分がtrueかfalseかによって処理を行うか否かを判断します。条件判断の部分を「条件式」と呼び,式を評価した値はboolean型でなければいけません。boolean型は真(true)か偽(false)の2つの値のどちらかをとります。条件式には関係演算子が多く使われます。if文には大きく分けて以下のような書き方があります。

if文

if (条件式) {
  処理;
}

 まず,もっとも単純なif文から説明します。上の構文は,「条件式が成り立つときは処理を実行する」という意味になります。このことを裏返せば,条件式が成り立たない場合,処理は実行されないということです。 { と } の間の処理は,複数のステートメントを記述することも可能です。また,Javaはフリーフォーマットなので,{ と } の間で改行しなくても問題ありません。例えば,下記のように記述しても結果は同じです。

if (条件式) {  処理; }

また,記述するステートメントが1つしかない場合は,{ と } を省略できます。

if (条件式)   処理;

ただし下記のようなコードの場合,処理2は条件判断とは関係なく,常に実行されるので,{ と }を省略する場合は注意が必要です。

if (条件式)
  処理1;
  処理2; // 常に実行されてしまう。

if文の練習

 以下のコードを入力し,ifTest.javaで保存して実行しましょう。

public class ifTest {
  public static void main(String[] args) {
    int a = 0;
    if (a == 100) {
      System.out.println("aは100です。");
    }
  }
}

コンパイルして実行しても,何も表示されません。

 変数aは,宣言と同時に0に初期化されています。ifに続く ( と ) の間の条件式では,変数aが100かどうかを判断しています。「==」は右辺と左辺が等しいときにtrueを返す関係演算子です。つまり,変数aが100のとき,処理は実行されます。当然,このコードでは,変数aの値は0ですから,if文の中の処理は実行されません。

 では,次のように初期値を0から100に変更してみましょう。

public class ifTest {
  public static void main(String[] args) {
    int a = 100;
    if (a == 100) {
      System.out.println("aは100です。");
    }
  }
}

この場合は,aは100に初期化されているので,if文の条件式はtrueになり,画面には「aは100です。」と表示されます。

if else文

 if else文は,elseにより「条件式が成り立たない場合の処理」を定義できます。

if (条件式) {
  処理1;
}
else {
  処理2;
}

上の構文は,「条件式が成り立つときは処理1,成り立たない時は処理2」が実行されます。つまり,elseの { と } の中には条件が成り立たなかった場合,実行する処理を記述します。

if else文の練習

 以下のコードを入力し,ifTest.javaで保存して実行しましょう。

public class ifTest {
  public static void main(String[] args) {
    int a = 0;
    if (a == 100) {
      System.out.println("aは100です。");
    }
    else {
      System.out.println("aは100ではありません。");
    }
  }
}

このプログラムを実行すると,aは0で初期化されているので,最初のif文の条件は成り立たず,画面には「aは100ではありません」と表示されます。

 前回のプログラムでは,条件が成り立たなかった場合は,処理は行われませんでしたが,elseを書くことで,成り立たなかった場合の処理も書けるようになりました。

複数のif文を連結する(else if文)

 条件が1つではなく,複数の条件を調べて処理を切り分けるには「else if」を使います。 条件の指定方法はifと同じように ( と ) の間に条件式を書きます。例えば,「条件式1が成り立つ場合は処理1を実行し,さもなくば(条件式1は成り立たないが),条件式2が成り立つときは処理2を実行する」といった場合以下のような記述になります。

if (条件式1) {
  処理1;
}
else if(条件式2){
  処理2;
}

このような,else ifは,条件式がたくさんある場合,いくつでもつずけることができます。また,どの条件にも当てはまらない場合の処理をelseで記述することもできます。

if (条件式1) {
  処理1;
}
else if(条件式2){
  処理2;
}
else if(条件式3){
  処理3;
}
else {
  どの条件も成り立たなかった場合の処理;
}

連結したif文の練習

 以下のコードを入力し,ifTest.javaで保存して実行してみましょう。

public class ifTest {
  public static void main(String[] args) {
    int a = 0;
    if (a == 0) {
      System.out.println("aは0です。");
    }
    else if (a == 100) {
      System.out.println("aは100です。");
    }
    else {
      System.out.println("aは0でも100でもありません。");
    }
  }
}

 このプログラムでは,最初に変数aが0かどうかを判断し,0でなければ100かどうかを判断します。もし,どちらでもない場合は,elseの中が実行されます。

 このコードの場合は,aは0に初期化されているので,「aは0です。」と表示されますが,aを100やその他の数字で初期化した場合,表示される文字は変わります。確認しておいてください。

switch文

 switch文は式の値によって,複数の処理の中から実行する処理を選択できます。

switch(式) {
  case n1:
    式の結果がn1だった場合の処理;
    break;
  case n2:
    式の結果がn2だった場合の処理;
    break;
  case n3:
    式の結果がn3だった場合の処理;
    break;
  case ・・・
  default:
    式の結果がどのcaseにも当てはまらなかった場合の処理;
}

まず,switchの後の()内の式の値が返されます。この場合の式は「byte型」「short型」「int型」「char型」のいずれかでなければいけません。もし,その値と同じ値を持つcase文があった場合,そのcase文のすぐ下から処理が進みます。処理を中断してswitch文から抜ける場合は,break文を記述します。break文がない場合は,その下のcase文も実行されます。

public class switchTest {
  public static void main(String[] args) {
    int a = 0;
    switch(a) {
      case 0:
        System.out.println("aは0です。");
        break;
      case 100:
        System.out.println("aは100です。");
        break;
      default:
        System.out.println("aは0でも100でもありません。");
    }
  }
}

 変数aは0に初期化されています。そのため,このプログラムを実行すると,「aは0です。」と表示されます。

 初期化のコードを0以外にしてコンパイルと実行を繰り返して動作の違いを確認してください。

 注意する点は,case以降の処理を中断するためにはbreak文が必要なことです。例えば,以下のようなコードを実行してみてください。

public class switchTest {
  public static void main(String[] args) {
    int a = 0;
    switch(a) {
      case 0:
        System.out.println("aは0です。");
      case 100:
        System.out.println("aは100です。");
      default:
        System.out.println("aは0でも100でもありません。");
    }
  }
}

実行すると

aは0です。
aは100です。
aは0でも100でもありません。

と連続して表示されてしまいます。

これは,break文が無いため,case 0:以降のコードをすべて実行してしまうためです。