上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语句。