为什么在使用for和while循环时会得到不同的结果?

时间:2014-12-24 13:45:00

标签: c# for-loop while-loop

为什么在使用for和while循环时会得到不同的结果?

for (int i = 1; i < 100; i*= 2)
{
    Console.Write(i);
}

//1248163264

int i = 1;
while (i < 100)
{
    i *= 2;
    Console.Write(i);
}

//248163264128

4 个答案:

答案 0 :(得分:5)

因为while语句首先执行Console.Write(128),然后检查i(在这种情况下为128)是否小于100

如果您在多次使用之前使用Console.Write(i);,则会得到相同的结果,因为在这种情况下,它会先写64值,然后按2编写多个128 < 100 }返回false,它将不再在你的while语句中执行。

int i = 1;
while (i < 100)
{
    Console.Write(i);
    i *= 2;
} // 1248163264

阅读8.8.1 The while statement

  

while语句执行如下:

     
      
  • 评估boolean-expression(第7.16节)。
  •   
  • 如果布尔表达式为true,则控制权转移到嵌入语句。何时以及如果控制到达终点   嵌入语句(可能来自执行继续   声明),控制权转移到了开始的时候   言。
  •   
  • 如果布尔表达式产生false,则控制权转移到while语句的结束点。
  •   

答案 1 :(得分:2)

那是因为你把增量放在与for循环不同的地方。要以同样的方式执行此操作,您应该在循环中使用最后一个增量:

int i = 1;
while (i < 100)
{
  Console.Write(i);
  i *= 2;
}

注意:while循环的实际输出为248163264128,而不是1248163264128。请注意,开头没有1,因为您在第一次输出之前将值增加到2

答案 2 :(得分:2)

for循环中,每次评估步骤(i *= 2)后都会检查条件。当false变为i时,它会评估为128 ,循环结束。

但是在while中,您的Console.WriteLine会在检查之前执行。那就是为什么它会输出一个额外的数字...

答案 3 :(得分:2)

正确转换:

for(initialization,condition,increment)
{data}

将此转换为必须执行此操作:

initialization
while(condition)
{
data
increment
}

你已经互换了线条,这就是为什么你得到错误的结果