18

switchJavaでは、ステートメント内の1つのケースのみを通過できますか?私がそうすれば、私は声明breakの最後まで失敗することを理解しています。switch

これが私の言いたいことです。次のコードを前提として、ケース2でケース2とケース1を実行します。ケース3で、ケース3とケース1を実行しますが、ケース2は実行しません。

switch(option) {
    case 3:  // code
             // skip the next case, not break
    case 2:  // code
    case 1:  // code
}
4

7 に答える 7

13

いいえ、あなたが求めていることはswitch声明では不可能です。caseに当たるまで、それぞれを通り抜けますbreakcase 1おそらく、ステートメントの外に出て、switchステートメントが関係なく実行されるようにしたい場合があります。

于 2013-03-25T02:10:45.590 に答える
12

コードをメソッドに入れ、必要に応じて呼び出します。あなたの例に従って:

void case1() {
    // Whatever case 1 does
}

void case2() {
    // Whatever case 2 does
}

void case3() {
    // Whatever case 3 does
}

switch(option) {
    case 3:
        case3();
        case1();
        break;
    case 2:
        case2();
        case1();
        break;
    case 1: 
        case1();   // You didn't specify what to do for case 1, so I assume you want case1()
        break;
    default:
        // Always a good idea to have a default, just in case demons are summoned
}

もちろんcase3()case2()...は非常に貧弱なメソッド名なので、メソッドが実際に何をするかについてもっと意味のある名前に変更する必要があります。

于 2013-03-25T02:10:25.973 に答える
11

私の提案は、次のような場合を除いて、フォールスルーを使用しないことです。

switch (option) {
    case 3:
        doSomething();
        break;
    case 2:
    case 1:
        doSomeOtherThing();
        break;
    case 0:
        // do nothing
        break;
}

つまり、いくつかのケースに、それらを処理するためのまったく同じコードブロックを(ラベルを「スタック」することによって)与えcaseて、ここでのフローが多かれ少なかれ明白になるようにします。ほとんどのプログラマーがケースのフォールスルーを直感的にチェックしたり(インデントによってケースが適切なブロックのように見えるため)、それに依存するコードを効率的に読み取ることができるとは思えません。

于 2013-03-25T02:23:39.877 に答える
1
switch(option) 
{
    case 3:
        ...
        break;
    case 2: 
        ...
        break;
}

... // code for case 1
于 2013-03-25T02:20:07.007 に答える
0

ケースを分割したい場合は、条件をカスタマイズできます

const { type, data } = valueNotifications

    let convertType = ''
    if (data?.type === 'LIVESTREAM' && type === 'NORMAL') { 
      convertType = 'LIVESTREAM1' 
    } else convertType = type 

    switch (convertType) 

私のユースケースでは、タイプを値通知から分割しましたが、data.typeにのみ表示される特定のLiveStreamケースが「LIVESTREAM」です

于 2021-05-31T05:14:32.777 に答える
-1

多分このような何か。

switch(option) {
    case 3:  // code
             // skip the next case, not break
        // BLOCK-3
    case 2:  // code
        if(option == 3) break;
        // BLOCK-2
    case 1:  // code
        // BLOCK-1
}
于 2013-03-25T02:16:39.023 に答える
-2

switchステートメントでは、そうでないbreak場合、後続のケースが実行されます。簡単な例を挙げましょう

    int value = 2;
    switch(value) {
    case 1: 
        System.out.println("one");
        break;
    case 2: 
        System.out.println("two");
    case 3: 
        System.out.println("three");
        break;
    }

出力します

two
three

breakケース2では実行されないため

于 2013-03-25T02:19:00.337 に答える