C#的While循环和For循环有什么区别?

7
在C#语言中,有一个问题一直困扰着我,那就是while循环和for循环之间的主要区别是什么。这只是纯粹的可读性问题吗?也就是说,你可以在while循环中完成所有你可以在for循环中完成的事情,只是在不同的地方完成。因此,请参考下面的例子:
int num = 3;
while (num < 10)
{
    Console.WriteLine(num);
    num++;
} 

vs

for (int x = 3; x < 10; x++)
{
    Console.WriteLine(x);
}

两种代码循环产生相同结果,唯一的区别在于for循环强制您声明一个新变量,并在每个循环周期开始时设置迭代值。也许我在任何主要差异方面都漏掉了其他内容,但如果有人能让我明确这一点就好了。谢谢。


2
“这只是纯粹的可读性问题” - 是的。虽然使用 for 循环更符合惯用语。 - ChrisF
While循环在其参数中不包括任何步进。同时,可以设置while循环没有明确的结束循环,而for循环具有定义的开始和结束。 - Shaun
1
for循环不必有一个定义的结束点,@shaun。显然的反例是 for (; ;) 是一个无限循环。 - Cody Gray
强相关:https://dev59.com/lXRB5IYBdhLWcg3wr44U - Cody Gray
4
for/while/do 关键字只是 goto 语句的语法糖。 - Hans Passant
4个回答

12
两者之间的唯一区别是for循环强制你声明一个新变量并在每次循环开始时设置迭代值吗?
for循环不会强制你做任何事情。你可以省略其中的任意一个部分。最简形式为:
for(;;)  // forever
{
  DoSomething();
}

但您可以使用这3个元素来编写更简洁的代码:

for(initializer; loop-condition; update-expression)
{
  controlled-statements;
}

等价于:

{
    initializer; 
    while(loop-condition)
    {
       controlled-statements;

    continue_target:  // goto here to emulate continue
       update-expression;
    }
}

注意外部的{}花括号,在for(int i = 0; ...; ...)中,i局部变量。这是一个明显的好处。

但在使用时的主要区别是当你在循环内部调用continue;时,使用while循环比使用for循环更容易出现逻辑错误。


4

是的,在后台它们完全相同(在汇编语言中,这是如此)。

通常情况下,如果重复次数已知且我们不打算更改计数器(索引),则更常用for循环。

while循环还具有哨兵循环的优点,例如,当从用户输入获取输入直到给定特定内容时,使用哨兵循环会更容易。


1
基本上,它们的区别在于: For循环事先知道循环次数,而while循环不知道。 For循环有一个初始化步骤,而while循环没有。 For循环使用“步长”或增量/减量步骤,而while循环没有。 这是一个Java for循环的示例,从0到99循环并打印数字。请注意,循环的初始化和递增是作为for循环结构的一部分完成的。
for(int i=0; i<100; i++) {
  System.out.println(i);
}

这是一个Java while循环的例子,它打印出整数数组中的所有元素。请注意,在循环之前初始化循环变量,并在循环体内递增。
int [] intArray = {1, 3, 5, 7, 9}; 
int i=0;
while(i<intArray.length) {
  System.out.println(intArray[i++]);

}


0

当你确定循环的结束值或循环执行的次数(直到什么值)时,请使用“for”循环,否则请使用“while”循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接