1. if else 文
外部の状況がどう変わっても同じことしかしないのなら、プログラムはあまり役に立ちません。プログラムは状況に合わせて振る舞いを変え、ある場合にはある処理を、別の場合には別の処理を行える必要があります。
Java では、条件分岐 — キーワードの if と else — によってこれを実現します。条件が真かどうかに応じて異なる処理ブロックを実行できます。
条件分岐は3つの要素から成ります: 条件、コマンド1、コマンド2。条件が真であれば コマンド1 を、そうでなければ コマンド2 を実行します。二つが同時に実行されることはありません。一般的な形は次のとおりです。
if (uslovie)
komanda1;
else
komanda2;
if-else
if は「もし〜なら」、else は「それ以外」を意味します。人間の言葉で書くと次のようになります。
Esli uslovie istinno, to
vypolnit' komanda1;
inache
vypolnit' komanda2;
if-else を人間の言葉で
例:
// 画面には次のメッセージが表示されます: あなたはまだ子どもです
int age = 17;
if (age < 18)
System.out.println("あなたはまだ子どもです");
else
System.out.println("あなたはもう大人です");
// 画面には次のメッセージが表示されます: 暖かいです
int temperature = 5;
if (temperature < 0)
System.out.println("外は厳しい寒さです");
else
System.out.println("暖かいです");
// 画面には次のメッセージが表示されます: 免許試験を受けられます
int age = 18;
if (age == 18)
System.out.println("免許試験を受けられます");
else
System.out.println("車のために貯金しましょう");
2. コードブロック
条件が成り立つ(または成り立たない)ときに複数の処理を実行したい場合は、それらをブロックにまとめます。
ブロックにまとめるには、波括弧で「囲み」ます。一般形は次のとおりです。
{
komanda1;
komanda2;
komanda3;
}
ブロック内の文の数は任意です。ゼロでも構いません。
if-else とブロックの組み合わせ例:
// 画面には次のメッセージが表示されます: まだ子どもだ。大人に反論しないで
int age = 17;
if (age < 18)
{
System.out.println("まだ子どもだ");
System.out.println("大人に反論しないで");
}
else
{
System.out.println("あなたはもう大人です");
System.out.println("最近の若者はまったく");
}
// 画面には次のメッセージが表示されます: 暖かいです
int temperature = 5;
if (temperature < 0)
{
System.out.println("外は厳しい寒さです");
System.out.println("帽子をかぶりなさい");
}
else
System.out.println("暖かいです");
// 空のブロックが実行されます。画面には何も表示されません。
int age = 21;
if (age == 18)
System.out.println("免許を取得できます");
else
{
}
3. 演算子 if の簡略構文
else ブロックが不要な場合は省略できます。その場合、if は次の形になります。
if (uslovie)
{
komanda1;
}
if
例:
int age = 19;
if (age >= 18)
{
System.out.println("あなたは成人です!");
}
どのように動作するのか
条件が真ならブロックのコードが実行されます。偽なら何も起きず、プログラムは次へ進みます。
プログラムに else ブロックがあっても中身が空(波括弧の間に文がない)なら、取り除いて構いません。挙動は変わりません。
4. 条件の組み合わせ: else if
単純な「はい/いいえ」ではなく、複数の選択肢から選びたいことがあります。そんなときに使うのが else if です。
if (uslovie1)
{
// 条件1が真のときに実行される
}
else if (uslovie2)
{
// 条件2が真で、かつ条件1が偽のときに実行される
}
else
{
// 上のどの条件にも当てはまらないときに実行される
}
例:
int hour = 13;
if (hour < 12)
{
System.out.println("おはようございます!");
}
else if (hour < 18)
{
System.out.println("こんにちは!");
}
else
{
System.out.println("こんばんは!");
}
ここで起きていること
- 12時より前なら朝。
- 12時から18時までは昼。
- それ以降は夕方。
- プログラムは選択肢を一つだけ選びます。いずれかの条件に合致した時点で、残りは評価されません。
5. 図解: 分岐のフローチャート
フローチャートにすると次のようになります:
条件が複数ある場合:
これはテーブルトークRPGの分岐にとても似ています。左に行けばある結果、右に行けば別の結果、まっすぐ進めばまた別の何か、という具合です。
6. どんな条件を評価できるか
if の括弧の中には論理式を置きます。結果は true か false のいずれかです。
主な比較演算子:
| 演算子 | 意味 | 例 |
|---|---|---|
|
等しい | |
|
等しくない | |
|
大きい | |
|
小さい | |
|
以上 | |
|
以下 | |
条件の例:
if (number == 10)
if (age != 18)
if (temperature > 36)
if (balance <= 0)
注意: =(1つ)は代入、==(2つ)は比較です。これは初心者が最もよくするミスの一つです。誤って次のように書くと:
if (x = 5) // エラー!
コンパイラがエラーとして教えてくれます。
7. 条件での文字列の扱い
Java における == による比較は数値に対しては正しく機能します。浮動小数点の比較に == を使うのは望ましくなく、文字列の比較に == を使うのは不可です。文字列はメソッド equals() を使って内容(参照ではなく)を比較してください。
文字列比較の細かな話は後で扱います。正しい比較方法の例は次のとおりです。
String password = console.nextLine();
if (password.equals("qwerty")) // equals() メソッドを呼び出し、2つ目の文字列を渡しています
{
System.out.println("ログインしました!");
}
8. 注意点とコツ:
中括弧は必要?不要?
if や else の直後に 1 文しかない場合、中括弧は省略できます。
if (age > 18)
System.out.println("あなたは18歳より上です!");
// ただし、常に書いておくほうが安全です:
if (age > 18)
{
System.out.println("あなたは18歳より上です!");
}
ヒント: 常に中括弧を書きましょう。コードを拡張するときの多くのエラーを防げます。
論理ミスに注意: 条件のかけ方に気をつける!
次のように書くと:
if (age > 18)
System.out.println("あなたは18歳より上です!");
System.out.println("ようこそ!");
コンパイラは次のように解釈します。
if (age > 18)
{
System.out.println("あなたは18歳より上です!");
}
System.out.println("ようこそ!");
2行目は常に実行されてしまいます。両方を同じ分岐に含めるには中括弧が必要です。
GO TO FULL VERSION