Java核心技术速学版(第3版)
上QQ阅读APP看书,第一时间看更新

1.7.4 break和continue

如果想从循环迭代的过程中退出,可以使用break语句。例如,假设你想处理用户输入的单词,直到用户输入字母Q为止。下面是一个使用boolean变量来控制循环的解决方案:

boolean done = false;
while (!done) {
     String input = in.next();
     if ("Q".equals(input)) {
          done = true;
     } else {
Process input
     }
}

下面的循环使用break语句执行相同的任务:

while(true) {
     String input = in.next();
if ("Q".equals(input)) break; // Exits loop
Process input
}
// break jumps here

当到达break语句时,循环将立即退出。

continue语句类似于break,但它不会跳到循环的终点,而是跳到当前循环迭代的终点。可以使用它来略过不需要的输入,例如:

while (in.hasNextInt()) {
     int input = in.nextInt();
if (input < 0) continue; // Jumps to test of in.hasNextInt()
Process input
}

在for循环中,continue语句将会跳转到下一个更新语句处:

for (int i = 1; i <= target; i++) {
     int input = in.nextInt();
if (n < 0) continue; // Jumps to i++
Process input
}

break语句仅从紧邻着的封闭循环或switch中跳转出来。如果要跳转到另一个封闭语句的末尾,请使用带标签的 break语句。在需要退出的语句处打上标签,例如:

outer:
while(...){
     ...
     while (...) {
          ...
if (...) break outer:
          ...
      }
      ...
}
// Labeled break jumps here

标签可以是任何名称。

警告:虽然你在语句的顶部打上了标签,但break语句将跳转到末尾

常规break语句只能用于退出循环或switch,但带标签的break语句可以将控制转移到任何语句的末尾,甚至是块语句:

exit: {
     ...
     if(...)break exit;
     ...
}
// Labeled break jumps here

还有一个带标签的continue语句,它跳转到标签处开始下一次迭代。

提示:许多编程人员发现break语句和continue语句令人困惑。需要知道的是,这些语句完全是可选的,没有它们也是可以表达相同的逻辑的。本书不会使用break语句或continue语句。