この記事の要点
• if文は条件が真(true)のときブロック内を実行
• else if で複数の条件を順にチェック、else でどれにも該当しない場合を処理
• 三項演算子 条件 ? 真 : 偽 で簡潔に値を選択できる
このシリーズについて
「Java入門」は1本1テーマで進む全15回のシリーズです。本記事はその第6回として、条件分岐(if / else if / else) を解説します。
前提条件: Java入門 #1 - 開発環境構築 でJDK 21 がインストール済み。変数、データ型、演算子の基礎を理解済み。
if文の基本構文
if 文は、条件式が true のときだけブロック内のコードを実行します。
if (条件式) {
// 条件が真のときに実行
}
実例を見ましょう。
// Java 21
public class IfBasic {
public static void main(String[] args) {
int age = 20;
if (age >= 18) {
System.out.println("成人です");
}
}
}
この場合、age >= 18 が true なので「成人です」が出力されます。
ポイント: 条件式は boolean 型(true / false)を返す必要があります。数値を直接書くとコンパイルエラーになります(C言語とは異なる点です)。
else 節
条件が false のときに実行する処理を追加するには else を使います。
if (条件式) {
// 真のとき
} else {
// 偽のとき
}
// Java 21
int temperature = 15;
if (temperature > 25) {
System.out.println("暑いです");
} else {
System.out.println("涼しいです");
}
// 出力: 涼しいです
else if で複数条件を判定
複数の条件を順にチェックするには else if を使います。
if (条件1) {
// 条件1が真
} else if (条件2) {
// 条件1が偽で、条件2が真
} else {
// どちらも偽
}
// Java 21
public class GradeCheck {
public static void main(String[] args) {
int score = 75;
if (score >= 90) {
System.out.println("評価: A");
} else if (score >= 70) {
System.out.println("評価: B");
} else if (score >= 50) {
System.out.println("評価: C");
} else {
System.out.println("評価: D");
}
}
}
// 出力: 評価: B
補足: else if は上から順にチェックされ、最初に true になった分岐のブロックだけが実行されます。その後の条件は評価されません。
比較演算子と論理演算子
条件式でよく使う演算子をまとめます。
比較演算子
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
== | 等しい | 5 == 5 | true |
!= | 等しくない | 5 != 3 | true |
> | より大きい | 5 > 3 | true |
< | より小さい | 5 < 3 | false |
>= | 以上 | 5 >= 5 | true |
<= | 以下 | 5 <= 3 | false |
注意: 文字列の比較には == ではなく .equals() を使ってください(詳細は Java入門 #5 を参照)。
論理演算子
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
&& | AND(かつ) | true && false | false |
|| | OR(または) | true || false | true |
! | NOT(否定) | !true | false |
// Java 21
int age = 25;
boolean hasLicense = true;
if (age >= 18 && hasLicense) {
System.out.println("運転できます");
} else {
System.out.println("運転できません");
}
// 出力: 運転できます
ネストしたif文
if 文の中に別の if 文を入れることができます(ネスト)。
// Java 21
int age = 20;
boolean isStudent = true;
if (age >= 18) {
if (isStudent) {
System.out.println("学生割引が適用されます");
} else {
System.out.println("通常料金です");
}
} else {
System.out.println("子供料金です");
}
// 出力: 学生割引が適用されます
ポイント: ネストが深くなりすぎるとコードが読みにくくなります。可能なら論理演算子(&& や ||)を使って1つの条件にまとめましょう。
三項演算子(条件演算子)
簡単な条件分岐なら、三項演算子を使って1行で書けます。
変数 = 条件式 ? 真のときの値 : 偽のときの値;
// Java 21
int age = 16;
String status = (age >= 18) ? "成人" : "未成年";
System.out.println(status); // "未成年"
これは以下と同じ意味です。
String status;
if (age >= 18) {
status = "成人";
} else {
status = "未成年";
}
補足: 三項演算子は短く書けますが、複雑な条件には向きません。可読性を優先して if-else を使うべき場合も多いです。
実例:ログイン判定
実際のプログラムでは、複数の条件を組み合わせてユーザーの状態を判定することがよくあります。
// Java 21
import java.util.Scanner;
public class LoginCheck {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("ユーザー名: ");
String username = scanner.nextLine().trim();
System.out.print("パスワード: ");
String password = scanner.nextLine().trim();
// 簡易的な認証ロジック(実際にはDBなどで検証)
if (username.isEmpty() || password.isEmpty()) {
System.out.println("エラー: ユーザー名とパスワードを入力してください");
} else if (username.equals("admin") && password.equals("pass123")) {
System.out.println("ログイン成功");
} else {
System.out.println("ユーザー名またはパスワードが間違っています");
}
scanner.close();
}
}
このコードは以下を実現しています。
- 空白入力のチェック(
isEmpty()) - 複数条件の組み合わせ(
||と&&) - 順序だった条件分岐(最初にエラー、次に正常ケース、最後にデフォルト)
よくあるミス
| ミス | 説明 | 正しい書き方 |
|---|---|---|
if (x = 5) | 代入演算子 = を使っている | if (x == 5) |
if (isValid) を if (isValid == true) と書く | 冗長 | if (isValid) で十分 |
波括弧 {} を省略して複数行書く | 2行目以降は常に実行される | 複数行なら必ず {} を付ける |
else if の最後に else がない | 想定外の値で何も起きない | 必要に応じて else で例外ケースを処理 |
ブロックの省略について
条件分岐の中身が1文だけなら波括弧 {} を省略できますが、推奨しません。
// 省略形(非推奨)
if (x > 0)
System.out.println("正の数");
// 推奨
if (x > 0) {
System.out.println("正の数");
}
注意: 波括弧を省略すると、後から行を追加したときにバグの原因になります。常に波括弧を書く習慣を付けましょう。
次のステップ
Java入門 #7 - switch文とswitch式(Java 14+) で、値による多分岐を簡潔に書く方法を学びます。
参考リソース
- The Java Tutorials - The if-then and if-then-else Statements — Oracle公式チュートリアル
- JLS - The if Statement — Java言語仕様
- Effective Java 第3版 — 条件分岐のベストプラクティス