【Java入門】if else で条件分岐させる書き方 - サンプルコードを元に徹底解説
条件分岐の最も基本的な流れはif文です。書き方が簡単な上に、単純な条件から演算を組み合わせた複雑な条件まで書けるので広い範囲で利用することができます。ここでは、言語をJavaに絞ってif文の使い方などを解説していきます
条件分岐の最も基本的な流れはif文です。書き方が簡単な上に、単純な条件から演算を組み合わせた複雑な条件まで書けるので広い範囲で利用することができます。ここでは、言語をJavaに絞ってif文の使い方などを解説していきます
スキルアップ
2023/02/22 UP
- プログラミング
- SE資格・スキル
- 入門
- Java
プログラムで何かの処理を実行するとき、条件によって処理が変わるのはよくあることです。前の画面で選択した結果や、前の処理が成功したか失敗したかなど、条件になるパラメーターはたくさんの種類が想定されます。決まった一通りの処理ではなく、条件によって制御の流れを変えたいときは条件分岐させましょう。
条件分岐の最も基本的な流れはif文です。書き方が簡単な上に、単純な条件から演算を組み合わせた複雑な条件まで書けるので広い範囲で利用することができます。ここでは、言語をJavaに絞ってif文の使い方などを解説していきます。
Javaのif文とは
Javaで使えるif文は主に3つの要素、if、else if、elseを利用して書きます。条件と共に記載し、判定条件が成立したときに実行するコードを指定するのが基本の書き方です。else節を使えば、複数条件の場合分けを記述できます。
条件式には通常比較演算式が使われます。論理演算子も使って複数の条件式を組み合わせていけば複雑な条件を作ることも可能です。
また条件式は上から順番に判定していきます。条件判定が思ったように行われない場合は、先に書かれた条件に該当してしまっていないか確認しましょう。
Javaで使える比較演算子一覧
記法 | 意味 |
---|---|
A < B | AはBより小さい |
A > B | AはBより大きい |
A <= B | AはB以下 |
A >= B | AはB以上 |
A == B | AはBと等しい |
A != B | AはBと等しくない |
Javaで使える比較演算子は以上の6パターンです。2つのオペランド(変数や定数などの比較する右辺と左辺のこと)の大小比較や等値比較を行います。より小さいと以下では、境界値となる値が異なります。二つが並んでいれば違いも意識できますが、コーディングをしている最中には忘れてしまいがちなポイントです。注意して覚えておくと失敗がありません。
Javaで使える論理演算子一覧
記法 | 意味 | trueとなる条件 |
---|---|---|
A && B | AかつB | AとBが共にtrue |
A || B | AまたはB | AかBの少なくとも一方がtrue |
!A | Aではない | Aがfalse |
Javaで使う論理演算子は以上の3パターンです。AND、OR、NOTの論理演算を行うことは他のプログラム言語と同じですが、書き方に注意しましょう。「または」の記号は見慣れないかもしれませんが、パイプもしくはパイプラインと呼ばれる記号です。
Javaのif文の書き方
Javaにおけるif文の基本的な書き方を、サンプルを列挙しながら解説していきます。
if文の基本形
public static void ifTest00(int n) { if (n > 0) { System.out.println("n の値は正です"); } }
条件に該当すれば処理を行い、該当しなければ何もしない基本形のサンプルです。メソッドの引数nが0より大きいときに、メッセージが出力されます。
if elseの形
public static void ifTest01(int n) { if (n > 0) { System.out.println("n の値は正です"); } else { System.out.println("n の値は正ではありません"); } }
条件に該当するとifの処理、該当しないとelseの処理を行うサンプルです。elseの処理の記載は必須ではないので、条件に該当する処理がないときは先に解説したif文の基本形の書き方で構いません。
ここでは、引数nが0より大きいときifの処理を、それ以外のときにelseの処理を行います。
if、else if、elseの形
public static void ifTest02(int n) { if (n > 0) { System.out.println("n の値は正です"); } else if (n == 0) { System.out.println("n の値は0です"); } else { System.out.println("n の値は負です"); } }
複数の条件で分岐させたいときはelse ifを使います。ここでは、引数nが0より大きいときにifの処理、0のときelse ifの処理、それ以外の値の時にelseの処理を行います。
else ifが複数の場合
public static void ifTest03(int n) { if (n <= 0) { System.out.println("n の値は0以下です"); } else if (n == 1) { System.out.println("n の値は1です"); } else if (n == 2) { System.out.println("n の値は2です"); } else { System.out.println("n の値は3以上です"); } }
else ifは複数つなぐことが可能です。条件の数だけelse ifでつなぎ、最後にelseを記載します。ここでは、引数nが0より小さいときはifの処理、1のとき、2のときはそれぞれのelse ifの処理、どれにも該当しなければelseの処理に入っていきます。
なお、条件に該当しないときの処理がなければelseの記載はなくてもエラーにはなりません。
and や or を使用した複数条件の書き方
public static void ifTest04(int month, int day) { if (month == 1 && day == 1) { System.out.println("元旦です"); } else if (month == 1 || month == 2 || month == 12) { System.out.println("冬です"); } }
比較演算子だけでなくandやorといった論理演算子まで使うことで、サンプルのような記述も可能です。ここでは、monthが1、dayが1、つまり1月1日は「元旦です」が表示されます。
monthが1または2または12のとき、つまり1月1日ではなく、12月、1月、2月の場合は「冬です』が表示されます。monthが1、dayも1の場合、両方の条件に一致しますが、if文は上から処理していくため、「元旦です」のみが表示されます。
なお、このサンプルではelseの処理がないので、それ以外の月のときは何も処理が行われず何も表示されません。
入れ子(ネスト)させる場合の書き方
public static void ifTest05(int month, int day) { if (month ==1) { if (day == 1) { System.out.println("元旦です"); } else { System.out.println("1月です"); } } else { System.out.println(month + "月です"); } }
ifの処理はネストさせて絞り込んでいく形で処理させることもできます。monthが1、dayが1のとき、つまり元旦の場合は「元旦です』が表示されます。monthが1でかつ、dayが1以外のとき、つまり元旦以外の1月は「1月です」が表示されます。それ以外は、monthの値がそのまま月として表示されます。
Java の if文 - 中級編
ここまでif文の基本的な書き方を解説してきましたが、ここからは少し変わった書き方や、ループを交えた書き方などを紹介していきます。
if文は 1行であれば { } がなくても動く
public static void ifTest06(int age) { if (age < 20) System.out.println("未成年です"); else System.out.println("成人です"); }
改行せずに1行で処理が収まる場合はサンプルの通り、{}の記載をすることもできます。
if文は三項演算子でもかける
public static void ifTest07(int age) { System.out.println((age < 20 ? "未成年です":"成人です")); }
三項演算子は、
評価する式 ? trueの場合 : falseの場合
という形で処理をします。
サンプルのコードは変数ageが20より小さいときに『未成年です』を表示します。20以上の時は条件判定がfalseになるので『成人です』のメッセージが出ます。
continue breakを利用したループの離脱
public static void ifTest08() { int a[] = {3, 5, -1, 4, 2}; int i = 0; while (i < 5) { if (a[i] < 0) { // 負の値があれば処理を中止 break; } System.out.println("a[" + i + "]: " + a[i]); ++i; } System.out.println("ループ終了"); i = 0; while (i < 5) { if (a[i] < 0) { // 負の値があればスキップ ++i; continue; } System.out.println("a[" + i + "]: " + a[i]); ++i; } System.out.println("ループ終了"); }
if文の処理の中にcontinueやbreakを入れることで、処理を制御することもできます。サンプルコードは配列aに5個の数字を格納し、条件判定に使用しています。
1つ目のwhileの処理は、負の値が入るとifの処理が実行され、breakで処理がそこで終了します。aの配列は3つ目の要素が-1なので、このwhileは2周回って3周目で止まります。
2つ目のwhileの処理は1つ目でbreakだった部分がcontinueに代わっています。負の値が来たときにifの中の処理に入っていくことは変わりませんが、処理が何も書いてないので、スキップと同等になります。whileが5周回ると、変数iが5になるので、処理がそこで終わります。
Javaのswitch文との違い
if文と同じく条件判定ができる構文にswitch文があります。if文とswitch文で大きく異なるのはswitch文が変数の値によって条件分岐するのに対し、if文は条件式の真偽で条件分岐する点です。
例えば条件判定の値が○○以上など、幅が出る場合にはif文の方が適しています。文字列の格納された変数など、true、falseの判定の記載がややこしくなるものはswitchで書いてしまう方が楽です。
またifは条件を上から順番に判定していきますが、switch文は該当ラベルに飛んで処理をします。つまり、該当しない処理を行わないため、処理量としてはswitch文の方が少なくなります。
書き方が違うだけで、同じ意味の処理を書くことができるケースもありますが、一般に場合分けが多い場合にはswitch文が適しているといわれています。if文で処理がうまくいかなかったり、煩雑になってしまったりする場合はswitch文に切り替えることを考えると整理できることもあります。
メンテナンスしやすい可読性の高いプログラムを書くためにもifとswitchの違いを押さえ、適切な方が使えるようにしておきましょう。
Javaの基本であるif文をマスターしよう
if文はプログラムの実行の流れを変える基本パターンの構文です。簡単な条件判定から複雑な条件式までさまざまな分岐を作ることができるので、自分でサンプルコードを書いて試してみましょう。
サンプルコードの処理はどんな処理でも構いませんが、どちらの条件に入ったかが分かりやすい処理の方が結果の検証がしやすいです。今回解説に使用したサンプルのように、特定の文章が表示されると分かりやすくなります。
記述方法自体は簡単なので、正しい記述方法を学び適切な場面で使えるようにマスターしていきましょう。