Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在使用for和while循环时会得到不同的结果?_C#_For Loop_While Loop - Fatal编程技术网

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

C# 为什么在使用for和while循环时会得到不同的结果?,c#,for-loop,while-loop,C#,For Loop,While Loop,为什么在使用for和while循环时会得到不同的结果 for (int i = 1; i < 100; i*= 2) { Console.Write(i); } //1248163264 因为while语句首先执行Console.Write128,然后检查在本例中为128的i是否小于100 如果您使用Console.Writei;在将其乘以之前,您将得到相同的结果,因为在本例中,它先写入64值,然后乘以2,并且由于128

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

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

//1248163264

因为while语句首先执行Console.Write128,然后检查在本例中为128的i是否小于100

如果您使用Console.Writei;在将其乘以之前,您将得到相同的结果,因为在本例中,它先写入64值,然后乘以2,并且由于128<100返回false,它将不再在while语句中执行

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

while语句执行如下:

计算第7.16节中的布尔表达式。 如果布尔表达式生成true,则控制权将转移到嵌入语句。控制何时和是否到达 可能来自continue执行的嵌入语句 语句,控制权将转移到while的开头 陈述 如果布尔表达式产生false,则控制权将转移到while语句的端点。
这是因为您将增量放置在与for循环不同的位置。要以相同的方式执行此操作,应在循环中使用最后一个增量:

int i = 1;
while (i < 100)
{
  Console.Write(i);
  i *= 2;
}
注意:while循环的实际输出是248163264128,而不是1248163264128。请注意,开始时没有1,因为在第一次输出之前将值增加到2。

在for循环中,每次计算步骤i*=2后都会检查该条件。因为当i变为128时,它会计算为false,因此循环结束

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

正确的转换:

for(initialization,condition,increment)
{data}
要在必须执行此操作时将其从转换为:

initialization
while(condition)
{
data
increment
}

您在中交换了这些行,而这就是您得到错误结果的原因

这将是了解调试器和调试的一个好方法。问题和代码非常简单,您可以将注意力集中在可用的工具上。请查看您编写和增量的顺序。
initialization
while(condition)
{
data
increment
}