【问题标题】:Why am I getting different results when using for and while loops?为什么在使用 for 和 while 循环时会得到不同的结果?
【发布时间】:2014-12-24 13:45:00
【问题描述】:

为什么我在使用 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

【问题讨论】:

  • 这将是一个伟大的东西用来了解调试器和调试。 “问题”和代码非常简单,您可以专注于可用的工具。
  • 看看你写和递增的顺序。

标签: c# for-loop while-loop


【解决方案1】:

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

如果您在倍增之前使用Console.Write(i);,您将得到相同的结果,因为在这种情况下,它首先写入您的64 值,然后乘以2,并且由于128 &lt; 100 返回false,它将不再在您的 while 语句中执行。

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

阅读8.8.1 The while statement

while 语句的执行如下:

  • 计算布尔表达式(第 7.16 节)。
  • 如果布尔表达式的结果为真,则控制权转移到嵌入语句。控制何时以及是否到达终点 嵌入的语句(可能来自执行 continue 语句),控制转移到 while 的开头 声明。
  • 如果布尔表达式的结果为 false,则将控制转移到 while 语句的终点。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这是因为您将增量放置在与for 循环不同的位置。要以同样的方式进行,您应该在循环中最后添加增量:

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

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

      【讨论】:

        【解决方案4】:

        适当的转换:

        for(initialization,condition,increment)
        {data}
        

        在你必须这样做时将其转换为:

        initialization
        while(condition)
        {
        data
        increment
        }
        

        你已经互换了行,而这就是你得到错误结果的原因

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-20
          • 2020-07-07
          • 2022-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-24
          • 1970-01-01
          相关资源
          最近更新 更多