if-else 文
「そうでないとき」を、初期値に押し付けている
条件が成り立たないときにも別の処理をしたい。これを if 単体で書こうとすると、たいてい変数の初期値に頼ることになります。
Java
String label = "ゲスト";
if (isLoggedIn) {
label = userName;
}動きはしますが、読む人は「if が成り立たなかったらどうなるか」を宣言の行まで戻って確かめないと分かりません。else を付ければ、true のときと false のときが横に並びます。
Java
if (isLoggedIn) {
System.out.println(userName + " さん");
} else {
System.out.println("ゲストさん");
}if 単体との違いは、通る道が必ず 1 本あることです。if だけなら「何も起きない」という結末がありえますが、if-else では 2 本のうちどちらか一方が必ず実行され、両方が実行されることも、どちらも実行されないこともありません。
else は単独では立てない
else は「それ以外すべて」を受け取る出口なので、丸括弧も条件も付きません。else (score > 0) { ... } と書くとエラーになります。条件を付けて 3 つ目の道を作りたいときは else if という別の書き方を使います。
もう 1 つ、else の直前には必ず if のブロックの閉じ括弧が来ていなければなりません。あいだに別の文を挟むと else が宙に浮き、'else' without 'if' というエラーで止まります。閉じ括弧の直後に } else { と続ける、この並びだけ覚えておけば十分です。
余りの符号は、割られる側についてくる
二者択一の判定でよく使うのが剰余演算子 % です。割り算の余りを返すだけの演算子ですが、負の数を渡したときの符号に癖があります。
Java
System.out.println(7 % 3); // 1
System.out.println(-7 % 3); // -1
System.out.println(7 % -3); // 1余りの符号は、右ではなく左、つまり割られる側と同じになります。-7 % 3 は 2 ではなく -1 です。数学の感覚とずれる場所なので、余りが特定の値と一致するかどうかを条件にするときは、負の数を入れたら何が返るかを一度手元で出力してから書いてください。
条件を書いたら「
trueのときは分かった。ではfalseのときは」と必ず自問します。バグの多くは、片側だけ考えて満足したところから生まれます。
要件
- クラス名は
Solution、メソッド名はevenOrOdd、引数はint nの 1 つにすること - 戻り値の型は
Stringで、偶数なら"even"、奇数なら"odd"を返すこと - 剰余演算子
%とif-else文を使って判定すること
入出力例
evenOrOdd(4) → "even"
evenOrOdd(7) → "odd"
evenOrOdd(0) → "even"
evenOrOdd(-3) → "odd"
evenOrOdd(-8) → "even"