如何使用break和/或continue语句返回第1,2和3点的while循环的第一行,例如,如伪代码所示?
假设我有一个让人联想到以下内容的场景:
while(condition) {
// want to return to this point
for (Integer x : xs) {
// point 1
for (Integer y : ys) {
// point 2
...
}
...
}
for (Integer a : as) {
for (Integer b : bs) {
// point 3
...
}
...
}
}
答案 0 :(得分:5)
使用如下标签:
outer:
while(condition) {
// want to return to this point
for (Integer x : xs) {
// point 1
for (Integer y : ys) {
// point 2
...
}
...
}
for (Integer a : as) {
for (Integer b : bs) {
// point 3
...
}
...
}
}
然后您可以使用break outer;
来转义while循环。这也适用于嵌套的for循环,但我尽量不要过度使用标签
正如@Peter所指出的那样,如果你希望提前完成当前的外部迭代并继续下一个迭代,则使用continue outer;
,而不是转义while循环。
答案 1 :(得分:2)
label你的循环语法
LABEL: LoopType
以后您可以使用 Break Statement 与break LABEL;
退出某个循环。
OUT: while(somecond){
IN:for(...) {
INNER: for(...){
break IN;// will get you outta IN and INNER for loop
}
}
}
答案 2 :(得分:2)
loop:
while(condition) {
// want to return to this point
for (Integer x : xs) {
continue loop:
for (Integer y : ys) {
continue loop:
...
}
...
}
for (Integer a : as) {
for (Integer b : bs) {
continue loop:
...
}
...
}
}
答案 3 :(得分:1)
你可以这样做:
here:
while(condition) {
for (Integer x : xs) {
// point 1
for (Integer y : ys) {
break here;
}
}
break语句,带或不带标签,is described in the Java specification:
没有标签的break语句尝试将控制转移到 最里面的封闭开关,while,do,或for语句 立即封闭方法或初始化器;这句话,是 称为中断目标,然后立即正常完成。
带有标签标识符的break语句尝试转移控件 到具有相同标签的封闭标签声明(第14.7节) 标识符作为其标签;这句话,叫做休息 目标,然后立即正常完成。在这种情况下,休息 目标不一定是开关,而是,做,或用于陈述。
答案 4 :(得分:0)
是的,您可以使用带有标签的break
语句:
SOME_LABEL:
// ... some code here
break SOME_LABEL;
谨慎使用,这是一种打破多个嵌套循环的简洁方法。
答案 5 :(得分:0)
你可以这样发布在这里发布stackoverflow.com/questions/886955/breaking-out-of-nested-loops-in-java处理同样的问题。