C#:For循环解释

时间:2016-01-06 14:42:13

标签: c# oop for-loop

我对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;来自?

4 个答案:

答案 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以来,所以......

enter image description here

答案 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();