Javaの論理演算子の基礎
はじめてでも大丈夫。論理演算子は「条件を組み合わせて、true/falseを判断するための道具」です。if文やwhile文でたくさん使います。
- 結果は必ずtrueかfalse: 比較式(例:
x > 0)をつなげると、最終的に「正しいか」「間違いか」だけが返ってきます。 - 3つだけ覚えればOK:
&&(AND)、||(OR)、!(NOT)。
3つの演算子を直感で理解する
AND(&&):両方満たすときだけtrue
- イメージ: 「これも、あれも」
- 例: 「数学が80点以上“かつ”英語も80点以上なら合格」
int math = 85;
int english = 82;
if (math >= 80 && english >= 80) {
System.out.println("合格");
} else {
System.out.println("不合格");
}
Java- ポイント: 片方でも条件を満たしていなければfalse。
OR(||):どちらか満たせばtrue
- イメージ: 「これか、またはあれ」
- 例: 「会員“または”クーポンがあるなら割引」
boolean isMember = false;
boolean hasCoupon = true;
if (isMember || hasCoupon) {
System.out.println("割引適用");
} else {
System.out.println("対象外");
}
Java- ポイント: 少なくとも1つがtrueならtrue。
NOT(!):真偽をひっくり返す
- イメージ: 「~ではない」
- 例: 「在庫が“ない”なら予約受付」
boolean inStock = false;
if (!inStock) {
System.out.println("予約受付中");
} else {
System.out.println("購入可能");
}
Java- ポイント:
trueをfalseに、falseをtrueにするだけのシンプルな反転。
よくある実用パターン
範囲判定(〇以上かつ〇未満)
- 例: 「年齢が20〜29なら20代」
int age = 25;
if (age >= 20 && age < 30) {
System.out.println("20代");
} else {
System.out.println("20代ではない");
}
Java含まれていない(NOTで排除)
- 例: 「禁止文字が“含まれていない”ならOK」
char c = 'A';
boolean isForbidden = (c == '@' || c == '#');
if (!isForbidden) {
System.out.println("使用OK");
} else {
System.out.println("使用NG");
}
Java複数条件の優先順位(括弧で整理)
- 例: 「会員かつ有効期限内、またはクーポンがあればOK」
boolean isMember = true;
boolean valid = false;
boolean hasCoupon = true;
if ((isMember && valid) || hasCoupon) {
System.out.println("OK");
} else {
System.out.println("NG");
}
Java- ポイント: 括弧を使うと読みやすく、意図通りに評価されます。
短絡評価(ショートサーキット)を体感する
Javaは&&や||で「無駄な評価を省く」仕組みがあります。
- AND(&&): 左がfalseなら右は見ない(どうせ全体はfalse)
- OR(||): 左がtrueなら右は見ない(どうせ全体はtrue)
int x = 0;
int y = 10;
if (x != 0 && (y / x) > 1) { // 左がfalseなので右側は評価されず、ゼロ除算を避けられる
System.out.println("条件を満たす");
} else {
System.out.println("条件を満たさない");
}
Java- 注意: 「右側で変数を書き換える」ような副作用(例:
count++)は、評価されないことがあるので書き方に気をつける。
例題で練習
例題1:入場条件
- 条件: 「身長が120cm以上“かつ”保護者同伴なら入場可」
int height = 118;
boolean withParent = true;
if (height >= 120 && withParent) {
System.out.println("入場可");
} else {
System.out.println("入場不可");
}
Java- 発展: 「身長が120cm以上“または”年齢が10歳以上なら入場可」に変えてみよう。
int height2 = 118;
int age = 11;
if (height2 >= 120 || age >= 10) {
System.out.println("入場可");
} else {
System.out.println("入場不可");
}
Java例題2:ログインチェック
- 条件: 「ユーザー名が空ではない“かつ”パスワードが8文字以上」
String user = "hana";
String pass = "abcd1234";
if (!user.isEmpty() && pass.length() >= 8) {
System.out.println("ログイン可能");
} else {
System.out.println("入力不備");
}
Java例題3:セール適用
- 条件: 「平日“かつ”17時以降、またはVIPならセール適用」
boolean isWeekday = true;
int hour = 18;
boolean isVIP = false;
if ((isWeekday && hour >= 17) || isVIP) {
System.out.println("セール適用");
} else {
System.out.println("通常価格");
}
Java例題4:危険操作の回避(短絡評価)
- 条件: 「配列がnullではない“かつ”長さが1以上なら先頭を読む」
int[] arr = null;
if (arr != null && arr.length > 0) {
System.out.println(arr[0]);
} else {
System.out.println("読み取り不可");
}
Java- ポイント: 左で
nullチェックをすることで、右のarr.lengthでの例外を防げる。
つまずきがちなポイント
- 比較演算子と混同しない:
=は代入、==は等しい。条件では==や>=などを使う。 - 文字列の比較は
==ではなくequals:name == "Bob"ではなく"Bob".equals(name)を使う。 - 括弧で意図を明確に: 複雑になったら必ず括弧。読みやすさ=バグ減少。
ミニ課題(自分で書いて動かす)
- 学割判定
- 条件: 「年齢が22歳以下“かつ”学生なら学割」
- 追加条件: 「シニア(65歳以上)は無条件で割引」
- 作ってみて: 学割かシニアであれば「割引」、そうでなければ「対象外」。
- パス判定
- 条件: 「テストの合計が200点以上“または”どれかが90点以上で合格」
- データ:
int m=70, e=65, s=90; - 作ってみて: 合格/不合格を表示。
- 安全な割り算
- 条件: 「分母が0ではない“かつ”計算結果が10以上なら表示」
- シナリオ:
int a=100, b=0;から始め、bをいくつか変えて試す。
