我有以下代码:
static void Main(string[] args)
{
int i = 0;
int k = 5 ;
Console.WriteLine("i" + " " + "k");
for (i = 0; i < k; i++)
{
k--;
Console.WriteLine(i + " " + k);
}
Console.WriteLine(i);
}
输出点在这里:
我知道
0 4
1 3
2 2
3
为什么它在达到2&lt; 1&lt; 1&lt; 1&gt;之后再次增加i
。 2这不是真的吗?
答案 0 :(得分:1)
条件为真(2 < 3)
并且在检查条件后但在K
写入之前减少Console
,这会导致混淆。
答案 1 :(得分:1)
因为当你打印2,2时检查条件是i = 2&lt; k = 3然后在你的循环中减少k的值。
打印2,2后,将i的值增加到3并且循环结束
答案 2 :(得分:1)
试试这个:
static void Main(string[] args)
{
int i = 0;
int k = 5 ;
Console.WriteLine("i" + " " + "k");
for (i = 0; i < k; i++)
{
Console.WriteLine(i + " " + k);
k--;
}
Console.WriteLine(i);
}
您减少变量的顺序很重要。
答案 3 :(得分:0)
可以通过检查how a for
loop works来解释循环结束时i == 3
的原因。你的代码,
int i = 0;
int k = 5 ;
Console.WriteLine("i" + " " + "k");
for (i = 0; i < k; i++)
{
k--;
Console.WriteLine(i + " " + k);
}
Console.WriteLine(i);
在语法上等同于
int i = 0;
int k = 5 ;
Console.WriteLine("i" + " " + "k");
while ( i < k )
{
k--;
Console.WriteLine(i + " " + k);
i++;
}
Console.WriteLine(i);
所以循环继续i < k
。换句话说,在循环结束时,i < k
为假。您的计划会输出2 2
,但在WriteLine
之后,{<1}}会在进行比较i++
之前评估。
为了进一步说明这一点,每次进行比较i < k
时,这里的状态为i
和k
:
i < k
当i k i < k
0 5 true
1 4 true
2 3 true
3 2 false // don't enter the loop
不为真时循环退出,在这种情况下,i < k
为3且i
为2时。