コンテンツにスキップ

条件分岐

プログラムの3つの考え方の一つ,「条件分岐」について説明する.

条件式

条件分岐は,ある条件が満たされているか,満たされていないかで判断されます.
日本語でいうと,真か偽か(あっているか,間違っているか)という真偽値を算出します.
プログラミング的に言うと,条件に対してtrue(真)を返すfalse返すかという話になります.
主な条件式は以下のとおりです.参考文献

表記 意味
true (データ型の復習)
false (データ型の復習)
a > b aはbより大きい
a < b →逆
a >= b aはb以上(順番に注意 =>ではありません)
a <= b aはb以下(順番に注意.=が右側に来ることを覚えてください)
a == b 基本データaと基本データbは等しい.または参照データにおいて同一オブジェクトである
a != b 基本データaと基本データbは等しくない.または参照データにおいて同一オブジェクトではない
  • ! a : 真偽値aの否定(NOT)(日本語にすると,aではない)
  • a || b : 真偽値aと真偽値bの論理和(OR)(aまたはb)
  • a && b : 真偽値aと真偽値bの論理積(AND)(aかつb)

何が返るか予想してみてください

  • 解答はプログラムを実行して確認してください.

  • System.out.println(1 > 2);

  • System.out.println(1 < 2);
  • System.out.println(8 >= 9);
  • System.out.println(11 <= 11);
  • System.out.println(121 == 212);
  • System.out.println(121 != 212);
  • System.out.println(! (121 == 212));
  • System.out.println( (42 >= 32) && (!(true)) );
  • System.out.println( (42 >= 32) || (!(true)) );

if文・if-else文

最も単純な条件分岐はifである.

条件式を設定し、

条件が真(True)の場合に実行される.

条件が偽(False)の場合,elseがあればelseが実行されるが,なければ次の処理に移る.

条件式については後述する.

int x = 8;

// IF文
if(x>=0){
    System.out.println("変数xは正の整数である");
}
if(x<0){
    System.out.println("変数xは負の整数である");
}

// IF-ELSE文
if(x>=10){
    System.out.println("変数xは10以上である");
}else{
    System.out.println("変数xは10以上ではない.");
}

// IF-ELSEIF文

if(x>=10){
    System.out.println("変数xは10以上である.");
}else if(x>=5){
    System.out.println("変数xは10以上ではないが,5以上である");
}else{
    System.out.println("変数xは10以上ではないし,5以上ではない.");
}

// ブロック構造を省略して書く。ブロック内の命令が一つしかない場合利用できる。複数行続くと見栄えが悪くなったりする
// ブロック使ったほうがいいと思う。

if(x>=10) System.out.println("変数xは10以上である.");

// よりかは。 if(x>=10) { System.out.println("変数xは10異常である."); } のほうがまだ綺麗。

else if(x>=5) System.out.println("変数xは10以上ではないが,5以上である");

else System.out.println("変数xは10以上ではないし,5以上ではない.");

// こういう書き方している人を見たことがある。正しい書き方かはわからない。
if(x>=10)
    System.out.println("変数xは10以上である.");
else if(x>=5)
    System.out.println("変数xは10以上ではないが,5以上である");
else
    System.out.println("変数xは10以上ではないし,5以上ではない.");

三項演算子を用いたIF記法

条件式 ? 真の場合の文 : 偽の場合の文

int x = 10;
char result;
// IF記法
if(x>=10){
    result='真';
}else{
    result='偽';
}

// 三項演算子を用いた文
result=(x>=10) ? '真' : '偽';

Switch文

条件分岐としてIF文のほか,Switch-case文がある.

switch(x){
    case 10:
        System.out.println("Xが10のときこの処理以降が実行されます");
    case 20:
        System.out.println("Xが20のときこの処理以降が実行されます");
    case 30:
        System.out.println("Xが30のときこの処理以降が実行されます");
}

通常,case文はbreakが無い限り次の処理も実行されてしまいます.すなわち,Xが10のときは20のときと30のときのぶんも表示されてしまいます.

break文を用意すればそれ以降は実行されなくなります.

    case 10:
        System.out.println("Xが10のときこの処理が実行されます");
        break;
    case 20:
        System.out.println("Xが20のときこの処理が実行されます");
        break;
    case 30:
        System.out.println("Xが30のときこの処理が実行されます");
        break;
    default:
        System.out.println("どれにも該当されなかった場合に");

case文は一部の整数と文字列型のみをサポートしています.

例えば

double y = 12.8;
switch (y){
    case 12.5:
        // ~
    case 12.8:
        // ~
}

のようなことはできません.


最終更新日: 2021年4月30日