C# 为什么在使用for和while循环时会得到不同的结果?
为什么在使用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 (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
}