为什么在使用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
答案 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
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
}
你已经互换了线条,这就是为什么你得到错误的结果