关于C#:如何使用语句continue 在while循环?

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
}

或者,根据语言的不同,您可以在while语句中正确地执行该操作(在选择i++++i时,请记住运算符优先权)。

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
}

不过,对于这种结构,我会质疑使用while循环。如果要在循环中使用计数器,则for循环通常更合适。


代替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++;
}

i最初是0,小于10,因此它进入循环,打印0并递增到1。然后,i变为2,3,4,…。八

当它变为8时,而不是递增,它会弹出到循环的开头,再次打印8。检查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;

此外,现在编译器已经足够好了,可以作为一个可能的无限循环来警告您这一点。还有一些代码分析工具也可以为您检测到这一点。