让我们看下面的代码片段:
int i = 0;
while ( i <= 10 )
{
System.out.println(i);
if ( i == 8 )
{
continue;
}
i++;
}
我必须在代码中进行哪些更改以避免无限循环?
答案 0 :(得分:8)
在开始时而不是在结尾处进行增量:
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
}
或者,根据语言,您可以在while
语句中执行此操作(请记住运算符优先级,无论您选择i++
还是++i
)
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
}
我会质疑这种结构使用while
循环。如果要在循环中使用计数器,for
循环通常更合适。
答案 1 :(得分:2)
而不是quickfix解决方案,让我们看一下你的代码一分钟,然后逐行逐步完成:
int i = 0;
while ( i <= 10 )
{
System.out.println(i);
if ( i == 8 )
{
continue;
}
i++;
}
i
首先是0,小于10,因此它进入循环,打印0并递增到1.然后i
变为2,3,4,... 8
当它等于8而不是递增时,它会弹回到循环的开头,再次打印8 ..检查i
的值(即8)并再次继续,打印8 ..它会一直这样做直到永恒。
因此,在测试之前增加数字,它将按预期工作。
将您的代码更改为此类
int i = 0;
while ( i <= 10 )
{
if ( i != 8 )
{
System.out.println(i);
}
i++;
}
答案 2 :(得分:0)
我喜欢Eric Petroelje的回答。 我建议做这样的事情:
if (++i >= 8) continue;
此外,这些天编译器足以警告你这可能是无限循环。还有代码分析工具也会为您检测到这一点。
答案 3 :(得分:0)
虽然在大多数情况下这是而不是我建议使用的代码,但它确实可以达到目的:
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++;
}