Javaの条件式であるif文とswitch文の使い方についてまとめます。
if文とは
基本的な構文は以下のようになります。
if (条件式) { 処理文; // 条件式の結果がtrueの時に実行される } else { 処理文; // 条件式の結果がfalseの時に実行される }
if文は条件式をもち、その条件を評価した結果に応じた処理を行う場合に使用します。条件の結果判定は、boolean値(trueまたはfalse)で行うため、結果がboolean値になる式でなければなりません。
この「結果がboolean値になる式でなければなりません。」というところがポイントです。 if文は特に悩むようなものではないと思いますが、これを正確に理解していることが重要になります。
私も最初はboolean値の変数判定では以下のように書いてました。
boolean dispflg = true; if (dispflg == true) { 処理文; }
これでも間違いではないのですが、実際は比較する必要はなくて以下だけの方がシンプルです。
boolean dispflg = true; if (dispflg) { 処理文; }
極端な例で言えばこういう使い方もできます。ありえませんが…
if (true) { 処理文; } else { 処理文; }
if文の使い方
状況別での使い分け方です。
1.if条件が1つの場合
//flg1とflg2が共にtrueの場合の処理 if(flg1 && flg2) { System.out.println("trueです。") } //又は if (flg1 && flg2) System.out.println("trueです");
2.条件が複数の場合(最後のelseは無くてもよい)
if (count == 1) { //countが1の場合の処理 System.out.println("countは1です"); } else if (count == 2) { //countが2の場合の処理 System.out.println("countは2です"); } else { //countが1でも2でもない場合の処理 System.out.println("countは1でも2でもありません"); }
3.条件演算子 (3項演算子)
[構文] (条件式) ? 式1 : 式2
msg = num < 10 ? "10未満" : "10以上"; System.out.println(msg); return num == null ? "" : num;
その他
何かで見たんですがこういうパターンにも注意です。
まずint値の条件文ですが = は代入演算子なのでコンパイルエラーになります。結果がboolean値になりません。== の関係演算子なら結果がboolean値になるのでOKです。
int a = 10; int b = 20; if (a = b) {} // コンパイルエラー if (a == b) {} // 正常
しかしboolean値の条件文の場合はどちらもコンパイルエラーになりません。a に b を代入した結果はtrueでboolean値であるからです。 比較したいのに間違って代入演算子になっちゃってたなんて事もあるかもしれないので気をつけましょう。
boolean a = false; boolean b = true; if (a = b) {} // 正常 if (a == b) {} // 正常
switch文とは
基本的な構文は以下のようになります。
switch (式) { case 定数1: 処理文1; // 式の結果が定数1と一致した時に実行される case 定数2: 処理文2; // 式の結果が定数2と一致した時に実行される default: 処理文x; // どのcaseにも一致しなかった時に実行される }
switch文は、式を評価した結果とcaseで指定した定数とを比較し、一致した場合に処理が実行されます。 式の結果は、データ型として byte、char、short、int、enum、String のいずれかの値である必要があります。
ここでのポイントはデータ型が決まっているという事です。 booleanは含まれていませんのでif文のように何かを比較したりという式を使用することは出来ません。 また、式の中で変数を宣言することも出来ません。
int a = 1; int b = 2; switch (int x = 1;) { } // コンパイルエラー switch (a == b) { } // コンパイルエラー switch (a + b) { } // 正常
使い方
実際の使い方です。特にbreak文は忘れないようにしましょう。
1.break文の記述
各caseの処理文の終わりには必ずbreak文を記述するようにしましょう。 以下の例でbreak文を記述しなかった場合はcase 1の処理を実行した後に、続けてcase 2とdefaultの処理が実行されてしまいます。caseで指定した定数と一致しなかったとしてもです。
int a = 1; switch (a) { case 1: System.out.println("1です。"); break; case 2: System.out.println("2です。"); break; default: System.out.println("defaultです。"); }
2.複数のcaseで同じ処理をしたい場合
1つのcaseには1つの定数のみ指定できます。なので複数の定数を指定したい場合は続けてcaseを記述します。
int a = 1; switch (a) { case 1: case 2: case 3: System.out.println("1〜3です。"); break; case 4: System.out.println("4です。"); break; default: System.out.println("defaultです。"); }