0

なぜこれをするのですか、

public class Bar 
{
    public static void main(String[] args) 
    {
        int i = 1;

        switch(i)
        {
            case 0:
            case 1:
            case 2:
                System.out.println("Case 2 being executed");
                break;
            default:
                break;
        }
    }
}

これを出力、

実行中のケース2

2入力値が明示的にある場合の入力値のケースブロックを入力することさえ可能1ですか?break1のcaseブロックにステートメントを追加することで、この動作を回避できることを認識していることに注意してください。

4

3 に答える 3

9

入力値が明示的に1の場合、入力値2のケースブロックを入力することさえ可能ですか?

この動作はフォールスルーと呼ばれ、を使用する初心者にはよくある間違いswitch-caseです。実際にcase 1:は、最初に実行されます。ただし、ケース1breakにはステートメントがないため、ステートメントが見つかるまで、次のケースの実行に進みます。したがって、それはのコードを実行し、したがって出力を実行します。そして、実行後にブレークが発生すると、ブレークします。switch-casebreakcase 2:case 2

したがって、次のように変更swich-caseします。-

switch(i)
{
        case 0: break;
        case 1: break;
        case 2:
            System.out.println("Case 2 being executed");
            break;
        default:
            break;
}

意図した動作を確認します。

于 2013-01-28T16:34:20.903 に答える
1

switchステートメントは、最初のブレークまたはswitchステートメントの終わりに達するまで、すべてのcaseブロックを実行します。

したがって、あなたの場合、2番目のブロックのブレークに達するまですべてのブロックを実行します。

「0」と「1」のブロックにステートメントがある場合、これらも実行されます。

この動作も非常に便利です。

于 2013-01-28T16:41:32.563 に答える
1

ケース1の後に休憩を入れなかったため、ケース2のロジックを使用します。すべての場合の後にbreakステートメントが必要です。そうしないと、コンパイラーは次の行に移動します。

于 2013-01-28T16:34:55.040 に答える