論理演算子
「かつ」、「または」、「〜でない」を含む複雑な条件
これまでの学習で、「aは0より大きい」や「bは0に等しい」のような簡単な条件については、十分に理解できたことでしょう。 ここではさらに、「aは0より大きい、かつbは0に等しい」や「aは0より大きい、またはbは0に等しい」といった条件について考えてみましょう。 このような複雑な条件を表現するには論理演算子(logical operator)を使います。 「かつ」は && で、「または」は || 、「〜でない」は ! で表現します。
例えば、「aは0より大きい、かつbは0に等しい」は
a > 0 && b == 0
となり、 a > 0 と b == 0 の両方ともtrueの場合だけ、式全体の値がtrueになります。 どちらか一方でもfalseならば、式全体の値はfalseになります。
「aは0より大きい、またはbは0に等しい」は
a > 0 || b == 0
となります。 今度は、 a > 0 か b == 0 のうち、少なくても一方がtrueならば、式全体の値がtrueになります。 もちろん、両方ともtrueの場合は、式全体の値はtrueです。
そして、「aは0より大きくない」は
! (a > 0)
となります。 a > 0 がfalseの場合だけ式全体がtrueになります。
演算子 | 使い方 | 式の値がtrueとなる場合 |
---|---|---|
&& | (条件1) && (条件2) | (条件1)も(条件2)もともにtrue |
|| | (条件1) || (条件2) | (条件1)か(条件2)のどちらかがtrue |
! | ! (条件) | (条件)がfalse |

&& では、(条件1)がtrueの場合だけ(条件2)が評価されます。 もしも(条件1)がfalseならば、(条件2)がどうであろうと、式全体はfalseであることが確定だからです。 || では、(条件1)がfalseの場合だけ(条件2)が評価されます。 もしも(条件1)がtrueならば、(条件2)がどうであろうと、式全体はtrueであることが確定だからです。
それでは、論理演算子の使い方をサンプルコードで確かめていきましょう。
最初は && を使ったコードです。
OperatorSample08.java
import java.io.*; class OperatorSample08 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("一つ目の数を入力してください。"); double num1 = Double.parseDouble(br.readLine()); System.out.println("二つ目の数を入力してください。"); double num2 = Double.parseDouble(br.readLine()); if(num1 > 0 && num2 > 0){ System.out.println("両方とも正の数です。"); }else{ System.out.println("少なくとも一方は0以下の数です。"); } } }
if〜else文の条件は、 num1 > 0 && num2 > 0 となっています。 したがって、 num1 > 0 と num2 > 0 がともにtrueの場合は、「両方とも正の数です。」と表示します。 そうでない場合、すなわち「num1が0以下、またはnum2が0以下」の場合は、「少なくとも一方は0以下の数です。」と表示します。
OperatorSample08の実行結果 1
一つ目の数を入力してください。 4 二つ目の数を入力してください。 2 両方とも正の数です。
OperatorSample08の実行結果 2
一つ目の数を入力してください。 8 二つ目の数を入力してください。 -5 少なくとも一方は0以下の数です。
この他にも数値を変えて試してみてください。
次は || を使ってみましょう。
OperatorSample09.java
import java.io.*; class OperatorSample09 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("一つ目の数を入力してください。"); double num1 = Double.parseDouble(br.readLine()); System.out.println("二つ目の数を入力してください。"); double num2 = Double.parseDouble(br.readLine()); if(num1 > 0 || num2 > 0){ System.out.println("少なくとも一方は正の数です。"); }else{ System.out.println("両方とも0以下の数です。"); } } }
if〜else文の条件は、 num1 > 0 || num2 > 0 となっています。 したがって、 num1 > 0 と num2 > 0 のどちらかがtrueの場合、「少なくとも一方は正の数です。」と表示します。 そうでない場合、すなわち「num1が0以下、かつnum2が0以下」の場合は、「両方とも0以下の数です。」と表示します。
OperatorSample09の実行結果 1
一つ目の数を入力してください。 5 二つ目の数を入力してください。 0 少なくとも一方は正の数です。
OperatorSample09の実行結果 2
一つ目の数を入力してください。 -6 二つ目の数を入力してください。 0 両方とも0以下の数です。
最後に ! の例を見てみましょう。
OperatorSample10.java
import java.io.*; class OperatorSample10 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("数を入力してください。"); double num = Double.parseDouble(br.readLine()); if(! (num > 0)){ System.out.println("0以下の数です。"); }else{ System.out.println("正の数です。"); } } }
if〜else文の条件は、 ! (num > 0) となっています。 したがって、 num1 > 0 がfalseの場合、「0以下の数です。」と表示します。 そうでない場合、すなわち「num1 > 0 」がtrueの場合は、「正の数です。」と表示します。
OperatorSample10の実行結果 1
数を入力してください。 10 正の数です。
OperatorSample10の実行結果 2
数を入力してください。 -20 0以下の数です。
「かつ」は && で、「または」は || 、「〜でない」は ! を使う。
if〜else文と論理演算子を使いこなす
これまでに学習した、条件分岐に関する知識を総動員して、合格判定のプログラムを完成させてみましょう。
PassOrFail.java
import java.io.*; class PassOrFail { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("得点を入力してください。"); int point = Integer.parseInt(br.readLine()); if(point >= 80 && point <=100){ if(point == 100){ System.out.println("満点で合格です!"); }else{ System.out.println("合格です。"); } System.out.println("おめでとうございます。"); }else if(point >= 60 && point < 80){ System.out.println("不合格 Aランクです。"); System.out.println("おしい。合格まであと一歩です。"); }else if(point >= 0 && point < 60){ System.out.println("不合格 Bランクです。"); System.out.println("学習方法を再検討しましょう。"); }else{ System.out.println("得点は0から100までの範囲です。"); } System.out.println("合格発表を終わります。"); } }
今回は、論理演算子を使って、より詳しく条件を設定しています。 どの条件もfalseだった場合は、100を超える得点か、マイナスの得点が入力されたことになります。 その場合は、「得点は0から100までの範囲です。」というメッセージを表示します。
PassOrFailの実行結果 1
得点を入力してください。 200 得点は0から100までの範囲です。 合格発表を終わります。
PassOrFailの実行結果 2
得点を入力してください。 -100 得点は0から100までの範囲です。 合格発表を終わります。