Java入門③ 条件分岐(if / switch文)

Java入門 Java入門

前回のおさらい

前回は演算子と文字列についてお話ししました。
覚えていますでしょうか?

まずは様々な演算子、「算術演算子」「代入演算子」「比較演算子」がありました。

算術演算子でいえば「+」や「-」、代入演算子は「=」や「+=」、比較演算子は「==」「>=」などなどありました。

さらに算術演算子の「+」を使えば数値だけでなく文字列もくっつけることができます!
これは便利ですね。

また、文字列は「ダブルクォーテーション(“”)」で囲むルールがあります。

そして最後に「メソッド」!
自分で複雑な処理を書かなくても、既に用意してくれている便利なものがあります。

以上が前回のおさらいをさらっとお届けいたしました。

条件分岐

まず条件分岐とは?

条件によって処理の方法や結果を分岐させていくことです!
いや、ちょっと違うか?まぁ感覚としてはこんな感じです。

①Aという条件の時はAを表示する。
②Bという条件の時はBを表示する。

皆さんならこういう時、どういうコードを書くか。

まさにこういう時に書くのが条件分岐の「if文」です!
その名の通り「もしもこうだったら」の場合のために条件ごとに処理を分けて書いていきます。

もう1つ「switch文」があります。
意味合い的には同じですが、書き方が異なり、使う場面も異なるので2種類に分かれているわけです。

では早速見ていきましょう!

if文

まずコードを見てみましょう。

int x = 10;

if (x > 5) {
    System.out.println("xは5より大きいです");
}

ここではまず「x」に「10」を代入しています。
後述にif文がありますが、「x > 5」という記述がありますね。
この「()」の中に条件となるものを書いていきます。

しかし、何でもかんでも記載できるわけじゃありません。

ここに記載できるのは結果が「boolean型」の式のみです!
また難しいこと言うなぁって思うでしょうが簡単に言えば、

正しいか間違っているか(trueかfalseか)のどちらかの結果を返すものしか入りません。

例えば「5 +3」や「”hello”」、「”年齢:” + 25」の結果はお分かりの通り決まってますよね?
前のほうから「8」「hello」「年齢:25」が答えです。

しかし、「age(変数) >= 20」「a == “A”」などなど。
この式の結果は変数の値によって「正しい(true)」「間違っている(false)」に分かれます。
この分岐を処理するためにif文とswitch文があります。

そして「true」の時にif文の中身を実行します!

if – else文

今までの知識だと、falseの場合は何もできません。

そんな事態を解決するのが「if -else文」です!

ではコード例を!

int age = 17;

if (age >= 18) {
    System.out.println("大人です");
} else {
    System.out.println("未成年です"); //条件はfalseの時の処理
}

この「else」を付けるだけで、「false」の場合も何らかの処理を実行できます。

二者択一の答えを求めるものであればこれで十分です。
しかし、
テストの点数を70点以上はC、80点以上はB、90点以上はAとしたいときはどうでしょうか?

それを解決するのが以下の構文です。

if-else if 文

まずはコードを見ましょう。

int score = 75;

if (score >= 90) {
    System.out.println("評価:A");
} else if (score >= 70) {
    System.out.println("評価:B");
} else if (score >= 50) {
    System.out.println("評価:C");
} else {
    System.out.println("評価:D");
}

さぁ、こんなにも条件を分岐させることができました。

つまり、「else if()」を使うことで新たな分岐を付け加えることができるのです!
べんり~。

そして細かい条件分岐をさせない部分は「else」以下に分岐させます。

文字列の比較

ちなみに今まで数値の比較しかしていませんでしたが、

String x = "おはよう";
String y = "こんばんは";

このような文字列を比較するときはどうでしょうか?

「x == y」と思った方は残念!
というか習ってないのでわからなくて当然です。

ここで使うのがまたまた出ました「メソッド」です!

今回使うメソッドは「equals()」です!

コードを見てみましょう。

String color = "red";

if (color.equals("red")) {
    System.out.println("赤です");
} else {
    System.out.println("赤ではありません");
}

このようにメソッドを使って文字列を比較することで、分岐処理も可能になります。

やはりメソッドは便利ですね!w

switch文

まずはif文との違いを簡単に紹介します。

比較ポイントif文switch文
目的複雑な条件判定に強い”値の一致”に特化
条件数いくつあってもOK値ごとに分岐分け
複雑な条件a > 10 && b < 5 など自由不可(基本は「値が○か」だけ)
可読性長くなりがちスッキリ読みやすい
switchが向いてる場面少し苦手選択肢が多い時に最強(メニュー、曜日、モード判定など)

といった感じになります。

実際にコードを見るとわかりやすいので、見てみましょう!

String day = "Mon";

switch (day) {
    case "Mon":
        System.out.println("月曜日です!");
        break;
    case "Tue":
        System.out.println("火曜日です!");
        break;
    default:
        System.out.println("その他の曜日");
}

なんとなく理解できそうでしょうか。

今回は前述のようなtrueとfalseではなく、変数の値そのもので判定をしているのです!

変数「day」の値を
switch(day)の中の「case」ごとに分岐して判定します。

つまり「day == “Mon”」なら「case “Mon”」の処理を行います!
また「break」というコードについても説明しますね。

「break」はその時点でswitch文を抜けるという意味。
つまり、それ以降に記載しているコードの処理は行わないということです。

switch文breakありbreakなし
String day = “Mon”;

switch (day) {
case “Mon”:
System.out.println(“月曜日です!”);
break;
case “Tue”:
System.out.println(“火曜日です!”);
break;
default:
System.out.println(“その他の曜日”);
}
「月曜です」と出力される。

case “Mon”に一致した後に
breakでswitch文を強制的に終了。
「月曜です」
「その他の曜日です」が出力される。

breakがないと上から
case “Mon”
case”Tue”
default
まで順々に評価を行うため。

表のとおり、「break」がないとswitsh文内のすべてのケースを評価していきます。

ここで、「default」がなぜ出力されるかというと

「default」は条件の値に関わらず、ここにたどり着いた時点で「default」下に記載される処理を実行します。

つまりどの値にも一致しない場合の処理を担当。
if文でのelseの役割といったところでしょう。

流れを簡単にいうと

case “Mon”を評価: day == “Mon”と一致。

case”Tue”を評価: day == “Mon”と不一致。

defaultは強制的に実行。

こうして一致した部分とdefaultを実行します。(breakなし)

このように評価がどんどんと最後のdefaultまで落ちていくことを
「フォールスルー」というらしいです。

breakの使い分け

breakありbreakなし
通常のswitch。
基本的にbreakは書くほうが多いかも。
複数の条件をまとめて処理するときはbreakを書かないこともある。

下記にコード例を記載します。
int num = 1;

switch (num) {
    case 1: //numが1、2、3の場合の処理をまとめている
    case 2:
    case 3:
        System.out.println("小さい数字です");
        break;

    case 4: //numが4、5、6の場合の処理をまとめている
    case 5:
    case 6:
        System.out.println("中くらいの数字です");
        break;

    default:
        System.out.println("その他です");
}

といった感じですが、どうでしょうか。

だらだらと説明しましたが、私からの個人的な意見としては

「基本はbreakも書いておく」です!

まとめ

最後にまとめを!

条件分岐

条件分岐意味備考
iftrueの時だけ処理を実行。最も基本的な条件分岐。シンプルな1条件に使う。
if-elsetrue の場合と、false の場合のどちらかを実行「どちらか必ず1つを実行したい」場合に使う。
if-else if条件を複数並べて判断できる。最後にelseでその他をまとめられる範囲判定・複雑な条件に強い。曖昧な条件にも対応可能。
switch値そのものに応じて分岐。特定の値ごとに処理を分けたいときに使う選択肢が多い時に見やすくて便利。breakはほぼ必須。

どうでしょうか。

今までの記事を参考にすればちょっとしたプログラムを作れるかもですね。

まだ自分が入力した値から計算するプログラムなどは作れないかもですが、
少しずつ前に進んでいきましょう!

ではでは!次回:繰り返し(while文)

コメント

タイトルとURLをコピーしました