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