我对C#中的循环有疑问。
我的代码:
for(i = 1; i < 100; i*=2)
{
Console.Write(i + " ");
}
Console.Readkey();
我认为结果应该是&#34; 2 4 8 16 32 64&#34;但我得到&#34; 1 2 4 8 16 32 64&#34;。 &#34; 1&#34;来自?
答案 0 :(得分:7)
您正在将i初始化为1,其中i = 1,这是1的来源。
在循环至少完成一次之前,不会调用增量(你的i * =;部分),所以直到它显示i的值为1之后它才会到达下一个值。 / p>
要了解您的期望,您需要将循环更改为:
for(i = 2; i < 100; i*=2)
{
Console.Write(i + " ");
}
Console.Readkey();
答案 1 :(得分:4)
我知道你已经得到了正确答案,但我想更深入地解释,因为我认为你是一名初学程序员。
来自C#规范中的$8.8.3
The for statement;
for-statement:
for ( for-initializer ; for-condition ; for-iterator ) embedded-statement
for语句执行如下:
- 如果存在for-initializer,则变量初始值设定项或语句表达式按其写入顺序执行。这个 步骤只执行一次。
- 如果存在条件,则对其进行评估。
- 如果for-condition不存在或者评估结果为true,则控制转移到嵌入语句。 何时以及如果 control到达嵌入语句的结束点(可能来自 执行一个continue语句),表达式 for-iterator,如果有的话,按顺序评估,然后是另一个 从评估条件开始执行迭代 在上面的步骤。
- 如果for-condition存在并且评估结果为false,则控制权转移到for语句的结束点。
正如您所看到的, for-iterator (在您的情况下为i*=2
)将不会执行直到您完成自{{{em>之后的第一次迭代1}}为i < 100
返回true
。
自a picture is worth a thousand words以来,所以......
答案 2 :(得分:2)
您从i = 1开始,因此您的第一个数字是1.
for循环由三个元素组成:start,condition和step。
我将尝试解释几个步骤,以便您可以了解这个想法。
首先你输入1,你打印它。然后它到达i * = 2,这相当于i = i * 2.此后条件被验证,如果是,则再次进入执行块。希望这能为你解决这个问题。你也只是乘以2,而不是以2的幂提升,这在另一个答案中有解释。
答案 3 :(得分:2)
你应该使用
for(i = 2; i <= 100; i=i*2)
{
Console.Write(i + " ");
}
Console.Readkey();