2017-02-16 75 views
0

是否有可能轉到默認情況下,而我在案例1/2 /等?切換到默認情況下切換案例

switch(num) { 
    case 1: 
     if(foo) { 
      //do something 
     } else { 
      //go to default 
     } 

     ... 
     ... 
     ... 

    default: 
     //do something 
} 
+1

不,Java不支持'goto'開關箱的功能。 – khelwood

+10

這將是可怕的。只需創建一個方法doDefault(),並從默認情況下和案例1的else分支中調用它。 –

+0

糟糕嗎? C#有這個。 – Joe

回答

5

即使更改num值,當你在switch對於比較值啓動開關的前可變的值,所以如果你已經進入case的一個分支,你不能再進入default

但是你可以這樣做

boolean doDefault = false; 
switch(num) { 
    case 1: 
     if(foo) { 
      ... 
     } 
     else { 
      doDefault = true; 
     } 
     break; 
} 

if(doDefault) { 
    //do something 
} 
1

不可能的,不會使實時的應用程序或任何使用情況下的意義,但是如果你想通過以下任一way-

    違約去比,你可以這樣做
  1. 刪除所有的突破,比你會在最後的肉默認。
  2. 調用goDefault()方法,其值與任何case都不匹配。
+0

它確實有道理。 C#有這個。 – Joe

+0

想要達到這個目的的任何事情都可以通過調用一個方法來輕鬆實現。例如,我們有100個案例,其中50個我們想要執行一些常見任務,創建一個方法並調用它們。優點默認只會在案例之後執行執行,這可以調用任何地方。這就是爲什麼Java不支持它。 – 2017-02-16 14:58:52

+1

它有一個用'goDefault'方法無法實現的用途:例如訪問本地作用域變量。當然,你可以用Java來實現任何東西,但是說這種模式「在任何用例中都沒有意義」是錯誤的。 – Joe

0

,你不行,但你可以調用相同的方法或離開了休息。

0

你可以把它們違約前也不要在制動的情況下結束,那麼它會執行所有語句休息前,不管是什麼情況

1

你可以寫是應該發生的邏輯在功能的default塊,並調用它在必要時:

void defAction(){ 
    printf("Hello, World!\n"); 
} 

int main() { 

    int num = 1, foo = 0; 

    switch(num) { 
     case 1: 
      if(foo) { 
       printf("Goodbye, World!\n"); 
      } else { 
       defAction(); 
      } 
      break; 
     default: 
      defAction(); 
    } 

    return 0; 
} 

請記住,如果情況不使用它下面(包​​括defaultbreak;,所有的情況下也被稱爲。這樣,如果你只打破了開關if(foo),它將進入default。 這只是非常有用,如果你想跳到default從不多於一個case,在這種情況下,你把case最後,在default之前。

謹慎

使用/見下文

switch(num) { 
    case 2: 
     // do sth 
     break; 
    case 3: 
     // do sth 
     break; 
    case 4: 
     // do sth 
     break; 
    case 1: 
     if(foo) { 
      printf("Goodbye, World!\n"); 
      break; 
     } 
     // ELSE don't break, use default 
    default: 
     defAction(); 
} 
+1

後者是醜陋的,將被大多數未來的程序員觸摸代碼誤讀。它至少需要用大寫字母發表評論,以警告讀者。 –

+1

@ OleV.V。你是對的!我個人對這樣的解決方案沒有問題,但其他人可能。我相應地編輯了我的答案...... – Barthy

1

評論這有可能使一個方法

switch(num) { 
    case 1: 
     if(foo) { 
      //do something 
     } else { 
      foo(); 
     } 
    default: 
     foo(); 
    } 
0

您在下面的方式實現這一目標。

假設你需要轉到案例1,2,8後的默認情況,那麼你可以寫下面的代碼。

switch(Choice){ 
    case 1 : //do something 
    case 2 : //do something 
    case 8 : //do something 
    default: //to do default operation 
    break; 
    case 3 : 
    case 4 : 
    } 
+1

但是,如果他/她需要按照您的建議方式離開案例1,則案例2和案例8也將被執行。這可能不是他/她想要的。 – Barthy

+0

是的,但是如果情況2和8的塊是空的,這是有用的。 –