else if で複数分岐
3 つ目の道が置けない
if と else では道が 2 本しかありません。気温から「猛暑日」「夏日」「それ以外」の 3 つを出し分けたいとき、2 本では真ん中が置けず、else の中にもう 1 つ if を入れて階層を深くすることになります。
else if を使うと、道を横に並べたまま増やせます。
Java
int temp = 27;
if (temp >= 30) {
System.out.println("猛暑日です");
} else if (temp >= 25) {
System.out.println("夏日です");
} else {
System.out.println("過ごしやすい一日です");
}上から順に条件を見ていき、最初に true になったブロックだけを実行して、残りは見ずに抜けます。temp が 27 のときは 1 つ目が false、2 つ目が true なので「夏日です」だけが出ます。3 つ目には到達しません。else if はいくつでも並べられます。
上に置いたゆるい条件が、下を全部殺す
「最初に当たったところで止まる」という性質は、並べる順番を間違えると牙をむきます。
Java
if (temp >= 25) {
System.out.println("夏日です");
} else if (temp >= 30) {
System.out.println("猛暑日です");
}これだと 35 度でも「夏日です」と出ます。temp >= 25 が先に true になり、その下は二度と評価されないからです。範囲で分けるときは、厳しい条件を上に、ゆるい条件を下に並べます。
書き終えたら、それぞれの条件に実際に届く値があるかを、上から 1 つずつ数字を当てはめて確かめます。一度も通らないブロックがあれば、順番が間違っています。
else を省くと、返す値が足りないと怒られる
else は省略できます。どれにも当てはまらないときに何もしないなら、if と else if だけで構いません。
Java
if (temp >= 35) {
System.out.println("外出をひかえましょう");
}ただし値を返すメソッドでは事情が変わります。return を分岐の中だけに書いて else を省くと、どの条件にも当てはまらなかった経路で返す値が無くなり、missing return statement というコンパイルエラーになります。最後を else で閉じておけば、Java は「必ずどこかに到達する」と判断できます。書く側にとっても、最後の else は「これで全部の場合を尽くした」という宣言になります。
なお else if は else と if の 2 単語です。あいだの半角スペースを詰めて elseif と書くとエラーになります。
要件
- クラス名は
Solution、メソッド名はsignOf、引数はint n1 つにすること - 戻り値の型は
Stringで、"positive"/"zero"/"negative"のいずれかを返すこと if/else if/elseを組み合わせて 3 分岐で書くこと (ネストやswitchではなくelse if連鎖で)
入出力例
signOf(5) → "positive"
signOf(0) → "zero"
signOf(-3) → "negative"
signOf(100) → "positive"