DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

3章20

もちろんです。以下は、Javaのコードスニペットにコメントを追加したものです。各case文の動作を解説しています。

public class Main {
    public static void main(String[] args) {
        final int NUM = 0; // 'NUM'は定数として0に設定されている。
        int num = 10; // 'num'は変数として10に設定されている。

        switch (num) { // 'num'の値が10であることに基づいて、以下の'case'文が評価される。

        // 以下のケースでは型の不一致があるためコンパイルエラーになる。
        // 'num'はint型であるため、文字列リテラルとマッチすることはできない。
        case "10": // コンパイルエラー: 'case'ラベルは'int'型のリテラルか定数式である必要がある。 "10"はString型(文字列型)
            System.out.println("A");
            break;

        // 以下のケースでは変数が使用されており、Javaではコンパイルエラーとなる。
        // 'case'ラベルには定数値が必要であり、変数を使うことはできない。
        case num : // コンパイルエラー: 'case'ラベルとして変数は許されていない。
            System.out.println("B");
            break;

        // このケースは正しく機能する。'2 * 5'はコンパイル時に評価される定数式であり、
        // 'num'の値と一致するため、このケースが実行される。
        case 2 * 5 : // 実行されるケース: 'num'の値10と一致。
            System.out.println("C"); // この行が出力される。
            break;

        // 以下のケースでは定数が使われているが、'num'の値とは一致しない。
        // 'NUM'は0であり、'num'の値は10なので、一致しない。
        case NUM : // 実行されないケース: 'NUM'は0であり、'num'の値10とは一致しない。
            System.out.println("D");
            break;
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

上記のコメントはコードの各部分がどのように機能するか(または機能しないか)を説明しており、特に6行目と8行目のコンパイルエラーに注目しています。case "10":は型の不一致でコンパイルエラーが生じ、「case num:」はswitch文内で変数がcaseラベルとして許されていないため、こちらもコンパイルエラーが生じます。

Top comments (0)