0

我有以下代码。我写了一个 for 循环,里面有 switch 语句。开关有两种情况,如果i==someOtherValue为真,则整个循环应该退出。

for (//iterate over elements){
    int i = someValueTakenFromLoop;
    if(i==someOtherValue){

        switch(i){
            case 5:
                //some logic
                break;
            case 6:
                //some logic
                break;
         }
     }
 }

在迭代 ifi==someOtherValue为 true 时,它​​应该退出循环。我需要将 break 语句保留在侧开关之外吗?

    for(//iterate over elements){
        int i = someValueTakenFromLoop;
        if(i==someOtherValue){
            switch(i){
                case 5:
                    //some logic
                    break;
                case 6:
                    //some logic
                    break;
            }
            break;
         }
     }

谢谢!

4

6 回答 6

7
mylabel:
for(...){
   switch(...){
      case x: break mylabel;
   }
}
于 2012-05-28T12:27:20.870 回答
6

如果您只有 2 个案例,为什么不使用更简单的if-else if语句而不是switch?

于 2012-05-28T12:28:20.803 回答
1

是的,

当你打破内部开关控制只是从开关而不是从外部循环中出来,所以你必须再次打破外部开关才能打破循环,或者使用标记循环,但如果你使用标记代码,请制作它们大写是为了更好的可读性,以便它们脱颖而出并且可以清楚地阅读,尽管 Java 约定建议使用驼峰式大小写。

1

for(...) {
      switch(...) {
         break; // this will break from switch
      }
      if(condition) {
         break; // this will break from for loop
      }
   }

2

OUTERLOOP:
for(...){
   switch(...){
       break OUTERLOOP;       
   }
}
于 2012-05-28T12:27:11.003 回答
0

你应该把 abreak指定如下:

if  (i == someOtherValue ) {  
  break; // breaks for loop
} // for some other value
// switch( to continue here
...
于 2012-05-28T12:28:40.573 回答
0

前者break只是把它排除在switch陈述之外。以下一个将起作用。

for(/*iterate over elements*/){
    int i = someValueTakenFromLoop;
    if(i==someOtherValue){
        switch(i){
        case 5:
            //some logic
            break;
        case 6:
            //some logic
            break;
        }
        break;
    }
}
于 2012-05-28T12:32:48.877 回答
0

edalorzo 的解决方案是完美的,但我想再添加一件事(并且无法访问评论):

你几乎总是可以使用方法来重构那种控制结构——

for ( /* ... */ ) {
    boolean finished = doSomething(i);
    if (finished) {
        break;
    }
}

//Later in the same class
private boolean doSomething(int val) {
    switch (val) {
        case 0:
            // do something;
            return true; // Break out of outer loop
        case 5:
            // do something absolutely terrifying
            break;
    }
    return false;
}

编辑:刚刚注意到您打算独立于开关条件中断 - 相当简单:

for ( /* ... */ ) {
    if ( /* ... */ ) {
        switch ( /* ... */ ) { /* ... */ }
        break;
    }
}
于 2012-05-28T12:33:05.157 回答