簡體   English   中英

Java:我可以在 switch 語句中只遇到一種情況嗎

[英]Java: Can I fall through only one case in a switch statement

在 Java 中,我可以只通過switch語句中的一種情況嗎? 我明白,如果我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
}

不,使用switch語句是不可能的。 您將通過每個case直到您遇到break 也許您希望case 1在您的switch語句之外,以便它無論如何都會被執行。

將代碼放入方法中並適當調用。 按照你的例子:

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() ... 是非常糟糕的方法名稱,您應該將其重命名為對方法實際執行的操作更有意義的名稱。

我的建議是,除了以下情況外,不要對任何事情使用 fallthrough:

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

也就是說,為幾個案例提供完全相同的代碼塊來處理它們(通過“堆疊” case標簽),使這里的流程或多或少變得顯而易見。 我懷疑大多數程序員會憑直覺檢查 case fall through(因為縮進使 case 看起來像一個適當的塊)或者可以有效地讀取依賴它的代碼 - 我知道我不知道。

switch(option) 
{
    case 3:
        ...
        break;
    case 2: 
        ...
        break;
}

... // code for case 1

如果要拆分案例,可以自定義條件

const { type, data } = valueNotifications

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

    switch (convertType) 

我的用例已將類型與值通知分開,但我有一個特定的 LiveStream 案例,它只顯示在 data.type 中是“LIVESTREAM”

也許像這樣的事情。

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
}

在 switch 語句中,如果不break ,則執行后續 case。 給你簡單的例子

    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不會在 case 2 上執行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM