我第一次看到这个关键字,我想知道是否有人可以向我解释它的作用。
-
什么是continue关键字?
-
它是如何工作的?
-
什么时候使用?
continue有点像goto。你熟悉break吗?相比之下,更容易思考它们:
-
休息和继续的好例子,我认为它是相同的>。<
-
不可能不是一个不错的完美500! +1
没有标签的continue语句将从最里面的while或do循环的条件以及最里面的for循环的更新表达式重新执行。它通常用于提前终止循环的处理,从而避免深度嵌套的if语句。在下面的示例中,continue将获取下一行,而不在循环中处理以下语句。
1 2 3 4 5
| while (getNext(line)) {
if (line.isEmpty() || line.isComment())
continue;
// More code here
} |
使用标签,continue将从具有相应标签的循环重新执行,而不是最内层循环。这可以用于逃避深层嵌套循环,或者仅为了清楚起见。
有时continue也用作占位符,以使空循环体更清晰。
1 2
| for (count = 0; foo.moreData(); count++)
continue; |
C和C ++中也存在没有标签的相同语句。 Perl中的等价物是next。
建议不要使用这种类型的控制流,但如果您这样选择,也可以使用continue来模拟有限形式的goto。在以下示例中,continue将重新执行空for (;;)循环。
1 2 3 4 5 6
| aLoopName: for (;;) {
// ...
while (someCondition)
// ...
if (otherCondition)
continue aLoopName; |
我们来看一个例子:
1 2 3 4 5 6
| int sum = 0;
for(int i = 1; i <= 100 ; i++){
if(i % 2 == 0)
continue;
sum += i;
} |
这将得到从1到100的奇数之和。
如果您将循环体视为子例程,continue就像return。 C中存在相同的关键字,并且用于相同的目的。这是一个人为的例子:
1 2 3 4 5 6
| for(int i =0; i < 10; ++i ) {
if (i % 2 == 0) {
continue;
}
System. out. println(i );
} |
这将只打印出奇数。
通常,我将continue(和break)视为代码可能使用某些重构的警告,尤其是在while或for循环声明未立即显示的情况下。对于方法中间的return也是如此,但原因略有不同。
正如其他人已经说过的那样,continue移动到循环的下一次迭代,而break移出封闭循环。
这些可以是维护时间弹,因为continue / break与循环之间没有直接链接,它继续/断开而不是上下文;添加一个内部循环或将循环的"内脏"移动到一个单独的方法中,你有continue / break失败的隐藏效果。
恕我直言,最好将它们作为最后的手段,然后确保它们的使用在循环的开始或结束时紧密组合在一起,以便下一个开发人员可以在一个屏幕中看到循环的"边界" 。
continue,break和return(除了方法结束时的One True Return)都属于"隐藏GOTO"的一般类别。它们将循环和函数控制置于意外的位置,最终导致错误。
-
我对回归不好的原因感兴趣。我已经感觉回归很糟糕,因为Scala不鼓励回报。
-
另一方面,允许方法从深度嵌套的循环返回可能是最简单,最可读和最合理的方法,而不是创建额外的变量只是为了使循环出口看起来更干净。
Java中的"continue"意味着转到当前循环的结尾,
意味着:如果编译器在循环中看到继续,它将进入下一次迭代
示例:这是用于打印1到10的奇数的代码
只要看到继续进入下一次迭代,编译器就会忽略打印代码
1 2 3 4
| for (int i = 0; i < 10; i ++) {
if (i %2 == 0) continue;
System. out. println(i +"");
} |
如前所述,continue将跳过处理它下面的代码,直到循环结束。然后,如果此条件仍然成立(或者如果有一个标志,则表示循环的条件),您将被移动到循环的条件并运行下一次迭代。
必须强调的是,在do - while的情况下,您将在continue之后移动到底部的条件,而不是在循环开始时。
这就是为什么很多人都无法正确回答以下代码将生成的内容。
1 2 3 4 5 6 7 8 9 10
| Random r = new Random();
Set <Integer > aSet = new HashSet <Integer >();
int anInt ;
do {
anInt = r. nextInt(10);
if (anInt % 2 == 0)
continue;
System. out. println(anInt );
} while (aSet. add(anInt ));
System. out. println(aSet ); |
*如果你的答案是aSet只包含100%的奇数......你错了!
考虑一个If Else条件。 continue语句执行条件中的内容并退出条件,即跳转到下一个迭代或条件。但是休息离开了循环。
请考虑以下计划。"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class ContinueBreak {
public static void main (String[] args ) {
String[] table ={"aa", "bb", "cc", "dd"};
for(String ss :table ){
if("bb". equals(ss )){
continue;
}
System. out. println(ss );
if("cc". equals(ss )){
break;
}
}
System. out. println("Out of the loop.");
}
} |
它将打印:aa cc Out of the loop。
如果你使用break代替continue(After if。),它只会打印aa并退出循环。
如果满足条件"bb"等于ss:
对于继续:它进入下一次迭代,即"cc".equals(ss)。
对于Break:它出自循环并打印出"Out of the loop"。
-
很确定它也会打印cc,因为"cc"!="bb"并且print语句在break之前
Continue是Java中的关键字,用于跳过当前迭代。
假设您要打印从1到100的所有奇数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class Main {
public static void main (String args []) {
//Program to print all odd numbers from 1 to 100
for(int i =1 ; i <=100 ; i ++) {
if(i % 2 == 0) {
continue;
}
System. out. println(i );
}
}
} |
上面程序中的continue语句只是在我是偶数时跳过迭代,并在奇数时打印i的值。
Continue语句只是将您带出循环而不执行循环内的其余语句并触发下一次迭代。
我参加聚会有点晚了,但......
值得一提的是,continue对于空循环很有用,其中所有工作都是在控制循环的条件表达式中完成的。例如:
1 2
| while ((buffer[i++] = readChar()) >= 0)
continue; |
在这种情况下,读取字符并将其附加到buffer的所有工作都是在控制while循环的表达式中完成的。 continue语句用作循环不需要正文的可视指示符。
它比同等的更明显:
并且肯定比使用如下的空语句更好(和更安全)的编码风格:
-
我绝对同意它更清晰,更易读的代码,但我不确定我是否遵循你关于它比其他选项"更安全"的论点,而(声明);用分号直接分隔。
-
@Aalok - 它更安全,因为一个单独的分号很容易在视觉上错过。它也很容易被意外地遗漏,这将使while之后的下一个语句成为while子句的主体,并且在视觉上不明显。显式continue是显而易见的,并传达了一个空语句没有的意图。
-
我明白了,所以你的意思主要是从设计的角度来看。那讲得通。我有一些潜在的东西与循环结构的方式。
基本上在java中,continue是一个声明。因此,continue语句通常与循环一起使用以跳过当前迭代。
有关如何以及何时在java中使用它,请参阅下面的链接。它有例子说明。
https://www.flowerbrackets.com/continue-java-example/
希望能帮助到你 !!