[PR] 迷惑メール トップページプロ3ゼミJavaJava入門講座一学期単位3 →4時間目

4時間目 柔軟なプログラムを書くには(switch文)

3−4−1.switch文の説明と使う理由

 switch文は、if文及びif〜else文と同じく、ある状況の時に文を実行する制御文の一つです。
以前(単位3 3時間目 ユーザからの入力に柔軟に対応する)に説明したように、 switch文と同じ処理をif文、if〜else文とその組合せで実現できます。
では、どういうときにswitch文を使うかというと、判断が決まっている時に使います。
例えば、1のボタンをスイッチするとAの爆弾が爆発する又は、2のボタンをスイッチするとBの爆弾が爆発する と行ったように処理を記述します。

 switch文の構文は次の通りです。
switch (式) {
    case 値:
        文;
        …
        break;
    …
    default:
        文;
        …
}
 switch文は構文を書くのが難しいので一般的な使い方の例を書きました。
「switch (式)」と書かれていますが、条件式ではないことに気が付きましたか。
if文とは違い、条件式、真偽を書いた場合はコンパイルエラーになりますので注意しましょう。
といっても実際にプログラミングしながら覚えるほうが早いので、確実に覚えておく必要はありませんよ。
 「case」が先ほど説明したボタンになります(一般的には、ラベルと呼びます)。
「case 値:」と書かれていますが、値がボタンの識別でint型又はchar型を書く事ができ、それ以外の値を 書いた場合は、コンパイルエラーです。
値は重複して書く事ができず、重複した場合もコンパイルエラーです。

 「default:」はcaseの値に該当しない場合に実行され、「case 値:」(ラベル)が一つも無い場合は常に実行され る事になります。

 ブロックを書かなかった場合は、コンパイルエラーです。
「case 値:」又は「default:」は両方必ず書く必要はありませんが、両方を書かなかった場合には、「文;」だけを書く 事はできず、コンパイルエラーです。
又「文」はラベル前にも書く事はできません。  文の数には制限が無くbreak文があるまで実行されます。
break文とは、「break;」に到達するとブロックを抜ける文です。
このブロックとは、switch文のブロックでswitch文以降が実行される事になります。
 defaultは、最後に書かないといけないのでbreak文を書く必要がありません。

3−4−2.switch文を使ったサンプルプログラム

Sample3_4_1は、switch文を使ったプログラムです。

Sample3_4_1.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;       

public class Sample3_4_1 {
    public static void main(String[] args) {
        new Switch().view();
    }
}

class Switch {
    void view() {
        // 入力の準備
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("押すスイッチをA又はBを入力してください!");
        // キーボードからのデータを文字列として受け取る
        String  str;
        char    ch;
        try {
            str = br.readLine();                    // 入力する
            ch = str.charAt(0);                     // char型に変換
            
            String  result;
            switch (ch) {
                case 'a':
                case 'A':
                    result = "Aが押されました。";
                    break;
                case 'b':
                case 'B':
                    result = "Bが押されました";
                    break;
                default:
                    result = "A又はBを入力してください!";
            }
            
            System.out.println(result);
        } catch (IOException e) {
            System.err.println("入力に失敗しました。");
        } catch (NumberFormatException e) {
            System.err.println("変換に失敗しました");
        }
    }
}
押すスイッチをA又はBを入力してください!
b
Bが押されました

 Sample3_4_1は、入力した文字列を文字に変換しています(String型からchar型へ)。
変換した文字は、switch文のcase 値:に対応するところに飛びそこの文を実行します。
いろいろと試すとプログラムがどう流れるかが分かるため試してみてください。
 Sample3_4_1をif文で書くと違いが分かりやすいので下の例を参考にしてください。
if (ch == 'a' || ch == 'A') {
    result = "Aが押されました。";
} else if (ch == 'b' || ch == 'B') {
    result = "Bが押されました";
} else {
    result = "A又はBを入力してください!";
}
 入力数が増えるたびswitch文の良さが分かるでしょう。
このように、決められた条件を使う場合はswitch文のほうが分かりやすいです。

3時間目 ユーザからの入力に柔軟に対応するに戻る     5時間目 柔軟プログラムを書くには(まとめ)進む

単位3 判断が分かるときはに戻る

トップページ に戻る