比較演算子
計算はできても、まだ「判断」はできない
前の回までで数を計算することはできるようになりましたが、計算しただけでは処理を変えられません。「気温が 30 度を超えたか」「在庫が 0 になったか」を機械に判断させるには、まず 2 つの値を比べて true か false を作る必要があります。それが比較演算子の仕事です。
Java
int temperature = 31;
boolean isHot = temperature > 30; // true
boolean isFreezing = temperature <= 0; // false比較演算子の結果は必ず boolean で、true か false のどちらかしかありません。使えるのは「より大きい」の >、「より小さい」の <、「以上」の >=、「以下」の <=、「等しい」の ==、「等しくない」の != の 6 つです。
>= と <= は不等号が先で = が後ろです。=> や =< と書くとコンパイルエラーになります。
= は入れる、== は見比べる
いちばん多い書き間違いが、この 2 つの取り違えです。= は「右の値を左の箱に入れろ」という命令、== は「左と右は同じか」という質問で、意味がまったく違います。
Java
int stock = 5;
boolean isEmpty = stock = 0; // コンパイルエラー。== のつもりが代入になっているJava は boolean を入れる場所に数値を置けないので、= を書き間違えると実行する前にコンパイラが止めてくれます。C 言語では黙って通ってしまい大事故になる書き間違いなので、これは Java の親切な仕様です。
==が見ているのは「同じ値か」ではなく「同じ物か」です。数値なら期待どおりに動きますが、文字列は中身が同じでも別の物として作られることがあるため、==ではなくtext.equals("完了")のようにequalsで比べます。
2 つの値の関係は、3 つのうち 1 つしかない
2 つの整数を比べたとき、起こりうるのは「等しい」「左が大きい」「左が小さい」の 3 通りだけです。そして必ず、どれか 1 つだけが成り立ちます。
Java
int stock = 4;
int ordered = 6;
System.out.println(stock == ordered); // false
System.out.println(stock < ordered); // truestock == ordered が false で stock < ordered が true だと分かった時点で、残る stock > ordered は確かめるまでもなく false です。3 つを並べて出力してみると、いつも true がちょうど 1 つだけ立ちます。2 つ以上が同時に true になったら、書いた式のどこかが間違っています。
要件
- クラス名は
Solution、メソッド名はcompare、引数はint a, int bの 2 つにすること - 戻り値の型は
Stringで、フォーマットは"a == b: X, a > b: Y, a < b: Z"(XYZはtrueかfalse) - 比較演算子
==><を使い、それぞれの結果を文字列に埋め込むこと
入出力例
compare(5, 3) → "a == b: false, a > b: true, a < b: false"
compare(2, 7) → "a == b: false, a > b: false, a < b: true"
compare(4, 4) → "a == b: true, a > b: false, a < b: false"
compare(-1, 0) → "a == b: false, a > b: false, a < b: true"