让我们看下面的代码片段:
int i = 0;
while ( i <= 10 )
{
System.out.println(i);
if ( i == 8 )
{
continue;
}
i++;
}
我必须在代码中进行哪些更改以避免无限循环?
让我们看下面的代码片段:
int i = 0;
while ( i <= 10 )
{
System.out.println(i);
if ( i == 8 )
{
continue;
}
i++;
}
我必须在代码中进行哪些更改以避免无限循环?
在开头而不是结尾做增量:
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
循环通常更合适。
而不是一个快速修复解决方案,让我们看看你的代码一分钟,然后逐行浏览它:
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++;
}
我喜欢 Eric Petroelje 的回答。我建议做这样的事情:
if (++i >= 8) continue;
此外,如今的编译器已经足以警告您这是一个可能的无限循环。还有一些代码分析工具也可以为您检测到这一点。
虽然这不是我在大多数情况下推荐使用的代码,但它确实起到了作用:
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++;
}