Java の論理演算子(&&, ||, !)を初心者向けに段階を追って説明し、実際に手を動かして確認できる例題・練習問題(解答付き)を用意します。
論理演算子とは
プログラムで「条件を組み合わせる」ための記号です。
条件は true(真)か false(偽)になります。論理演算子を使って複数の条件を結び、最終的に true か false を得ます。
主な3つ:
&&:AND(かつ) — 両方が true のときだけ true||:OR(または) — どちらか一方(または両方)が true なら true!:NOT(〜ではない) — true を false に、false を true にする
真理値表(覚えやすいように短く)
A B A && B A || B
true true true true
true false false true
false true false true
false false false false
!A:
A = true -> !A = false
A = false -> !A = true
具体例(コードでイメージ)
以下のコードはそのままコピーして実行できます(Java)。
public class LogicExample {
public static void main(String[] args) {
int math = 84;
int sci = 78;
// AND: 両方満たすとき
if (math > 80 && sci > 80) {
System.out.println("数学と理科、両方80点超え!");
} else {
System.out.println("残念、どちらかが80点以下です。");
}
// OR: どちらか満たせばOK
if (math > 80 || sci > 80) {
System.out.println("どちらか一方は80点超えです。");
}
// NOT: 否定
boolean passed = math >= 60;
System.out.println("数学合格ではない? -> " + !passed);
}
}
Java出力イメージ:
残念、どちらかが80点以下です。
どちらか一方は80点超えです。
数学合格ではない? -> false
重要なポイント:短絡評価(ショートサーキット)
&& と || は短絡評価を行います。
意味:左側だけで結果が確定する場合、右側は評価(実行)されません。
例:
int x = 3;
if (x > 5 && ++x > 0) {
// ...
}
System.out.println(x); // -> 3 のまま(++x は実行されない)
Java左側 x > 5 が false なので、&& の性質上右側は評価されず x は増えません。
逆に | や &(単一の縦棒やアンパサンド)は短絡評価しないので、右側も評価されます。副作用(++など)がある場合は挙動が変わるので注意。
よくあるミス・注意点
=と==を間違える=は代入(a = 5;)==は等価比較(a == 5)
&と&&の違いを知らない(副作用が無い場合は結果は同じだが評価順が違う)!を複数重ねて読みにくくする(!!aはaに戻る)- 複雑な条件は括弧
()で読みやすく書く(優先順位のミス防止)- 例:
if ((a > 0 && b > 0) || c > 0) {...}
- 例:
便利なテクニック:De Morgan(ド・モルガン)の法則
条件の否定を整理するときに便利:
!(A && B)は!A || !B!(A || B)は!A && !B
使いどころ:if の条件を反転して書くときなどに読みやすくできます。
例:
// 元
if (!(x > 0 && y > 0)) {
// x または y が 0 以下のとき
}
// De Morgan で
if (x <= 0 || y <= 0) {
// 同じ意味
}
Java実践的な例(少し応用)
- ユーザー入力で年齢と会員フラグから割引判定:
int age = 20;
boolean isMember = true;
if (age >= 18 && isMember) {
System.out.println("割引対象です");
}
Java- null チェックとメソッド呼び出し(短絡評価が安全を生むパターン):
String s = null;
if (s != null && s.length() > 0) {
// s が null のとき length() は呼ばれない -> NullPointerException 回避
}
Java練習問題
下に問題 → 答え・解説 を付けます。まずは自分で考えてから答えを見ると効果的!
問題1
a = 5, b = 10 のとき、式 a > 3 && b < 20 の結果は?
問題2
次のコードの出力は?
int x = 0;
if (x > 1 || ++x > 0) {
// do nothing
}
System.out.println(x);
Java問題3
if (!(a == b)) を De Morgan を使って書き換えると?
問題4
次のどれが true か?(複数可)
- A:
true || false - B:
false && true - C:
!false
問題5(実践)
ユーザーが「18歳以上 かつ (学生である または 会員である)」場合にメッセージを出す if 文を書け。
答えと解説
問題1a > 3 は true(5 > 3)、b < 20 は true(10 < 20)なので true && true → true。
問題2x = 0。x > 1 は false なので || の短絡評価で右側を評価する。右側 ++x > 0 は ++x で x が 1 になり 1 > 0 は true。したがって if は true だが重要なのは x の最終値:1。
問題3!(a == b) は a != b に等しい(a == b の否定は「等しくない」)。
問題4
- A:
true || false→ true - B:
false && true→ false - C:
!false→ true
したがって A と C が true。
問題5(解答)
int age = 19;
boolean isStudent = false;
boolean isMember = true;
if (age >= 18 && (isStudent || isMember)) {
System.out.println("割引対象です");
}
Javaポイント:(isStudent || isMember) を括弧で囲んで読みやすくしている。
練習をさらに続けたい人向け(おすすめ)
- 自分で条件を組み合わせた
if文を書いてSystem.out.printlnで真偽を確認する。 - 副作用(
i++や++i)を使って短絡評価の挙動を実験してみる。 - 複雑になったらまず真理値表を手で書いてみる(小さな A, B の組合せで確認)。
最後に — 覚えておくべきチェックリスト
==と=を区別する&&/||の短絡評価を意識する(副作用に注意)- 複雑な条件は
()で明示して読みやすくする !を使うときは! ( ... )で否定の範囲をはっきりさせる
