2017-02-16 85 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的块是空的,这是有用的。 –