How to use the statement continue in while loop?
下面是代码段:
1 2 3 4 5 6 7 8 9 10 | int i = 0; while ( i <= 10 ) { System.out.println(i); if ( i == 8 ) { continue; } i++; } |
为了避免无限循环,我必须在代码中进行哪些更改?
在开始而不是结束时执行增量:
1 2 3 4 5 6 7 8 9 10 11 12 | int i = -1; while ( i <= 10 ) { i++; System.out.println(i); if ( i == 8 ) { continue; } // Presumably there would be some code here, or this doesn't really make much sense } |
或者,根据语言的不同,您可以在
1 2 3 4 5 6 7 8 9 10 11 | int i = 0 while ( i++ <= 10 ) { System.out.println(i); if ( i == 8 ) { continue; } // Presumably there would be some code here, or this doesn't really make much sense } |
不过,对于这种结构,我会质疑使用
代替QuickFix解决方案,让我们看一分钟您的代码并逐行执行:
1 2 3 4 5 6 7 8 9 10 | int i = 0; while ( i <= 10 ) { System.out.println(i); if ( i == 8 ) { continue; } i++; } |
当它变为8时,而不是递增,它会弹出到循环的开头,再次打印8。检查
因此,在测试前增加数字,它将按预期工作。
把你的代码改成这样
1 2 3 4 5 6 7 8 9 | int i = 0; while ( i <= 10 ) { if ( i != 8 ) { System.out.println(i); } i++; } |
虽然这不是我在大多数情况下推荐使用的代码,但它确实有以下用途:
1 2 3 4 5 6 7 8 9 10 11 12 13 | int i = 0; while ( i <= 10 ) { Console.WriteLine(i.ToString()); if ( i == 8 ) { // Do some work here, then bail on this iteration. goto Continue; } Continue: // Yes, C# does support labels, using sparingly! i++; } |
我喜欢埃里克·彼得罗耶尔的回答。我建议这样做:
1 | if (++i >= 8) continue; |
此外,现在编译器已经足够好了,可以作为一个可能的无限循环来警告您这一点。还有一些代码分析工具也可以为您检测到这一点。