本記事は、Javaを一から学んでいく際の学習メモとして書かれています。
主にインプレスから出版されている「スッキリわかるJava入門 第2版 (スッキリシリーズ)」の内容に沿ったかたちで学習していきます。
今回は、Javaの条件分岐について学んでいきます。
プログラムの制御構造
プログラムは基本的に上から順番に処理されていきますが、場合によっては、処理を分岐させたり、ある部分を繰り返したりすることができます。
構造化定理(structure theorem)では、これらの順次、選択、反復の3つの制御構造で、どのようなプログラムでも作成可能だとされています。
if-else文
ある条件によってプログラムの流れを変えることを条件分岐と呼び、if-else文
という構文を使い分岐させます。
int a = 1; if (a > 0){ System.out.println("a is over 0."); } else { System.out.println("a is under 0."); }
if
の後に続く(a > 0)
の部分は条件式と呼び、この条件式(後述)の結果がtrue
となれば、if
ブロックに記述されている処理が実行され、false
の場合はelse
ブロックに記述されている処理が実行されます。
なお、else
ブロックの処理は特に必要がない場合は、if
ブロックのみでも記述可能です。
また、さらに条件分岐をさせたい場合には、以下のようにelse if
文を追加します。
int a = 1; if (a > 0){ System.out.println("a is over 0."); } else if (a == 0){ System.out.println("a is 0."); } else { System.out.println("a is under 0."); }
条件式
上記のif
の後には(a > 0)
という条件式があり、この結果が真(true)の場合、if
ブロックの処理が実行されます。
このように>
のような記号を関係演算子と呼びます。
以下が利用できる関係演算子の種類になります。
演算子 | 内容 |
== | 左辺と右辺が等しい |
!= | 左辺と右辺が等しくない |
> | 左辺が右辺より大きい |
< | 左辺が右辺より小さい |
>= | 左辺が右辺より大きいか等しい |
<= | 左辺が右辺より小さいか等しい |
また条件分岐では、「年齢が20歳以上、かつ30歳未満」のように少し複雑な条件を設ける場合には、論理演算子を用いた条件式を利用します。
演算子 | 内容 |
&& | and(いずれもtrueの場合) |
|| | or(いずれかがtrueの場合) |
以下が論理演算子を使った例となります。
int age = 25;
// 年齢が20歳以上、かつ30歳未満 if (age >= 20 && age < 30){ ..... }
switch文
分岐させる条件が「変数 == 値」や「変数 == 変数」の場合はswitch
文が利用できます。
switch
文では、条件値を指定し、それがcase
に続く値に合致していれば、その部分の処理を実行します。
なお、条件値に指定できるのは、整数(byte型, short型, int型)、文字列(String型)と文字(char型)になり、long型、少数型、真偽値型は指定できません。
int a = 1; switch (a){ case 1: System.out.println("a is over 0."); break; case 0: System.out.println("a is 0."); break; default: System.out.println("a is under 0."); }
前述のif
文は、上から順番に条件を見ていきますが、switch
文はジャンプテーブルというものを使用し、その条件に合致する箇所へ高速にジャンプすることができ、そのためif
文よりも高速かつ可読性も向上します。
また各case
文の最後にbreak
文を記述しないと、目的のcase
までジャンプした後に次のcase
まで実行してしまいます。
条件演算子
二つの値を比較して、条件式にあったどちらかを返すだけなら、条件演算子(conditional operator: 三項演算子)を利用するとワンライナーで書くことができます。
int a = 1; System.out.println(a > 0 ? "a is over 0." : "a is under 0.");
最後に
今回はJavaの条件分岐について、基本的なルールを学びました。
次回はfor文などの繰り返しについて学んでいきます。
参考書籍