如何退出循环?

时间:2012-05-28 12:24:55

标签: java

我有以下代码。我写了一个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;
         }
     }
 }

在迭代i==someOtherValue为真时,它应该退出循环。我是否需要将断开声明保留在侧面开关?。

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

谢谢!

6 个答案:

答案 0 :(得分:7)

mylabel:
for(...){
   switch(...){
      case x: break mylabel;
   }
}

答案 1 :(得分:6)

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

答案 2 :(得分: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;       
   }
}

答案 3 :(得分:0)

您应该按照以下规定添加break

if  (i == someOtherValue ) {  
  break; // breaks for loop
} // for some other value
// switch( to continue here
...

答案 4 :(得分: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;
    }
}

答案 5 :(得分: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;
    }
}