没有大括号意味着循环只影响循环后面的下一条语句。
所以
for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );
相当于
for (i = 2; i <= n; i = i+2)
{
System.out.println (n + " " + i + " " + j );
}
通常,在这些情况下使用缩进以使代码更易于理解,如下所示:
for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );
编辑:现在,这是问题的实际答案。这完全取决于循环执行的不同迭代以及变量如何递增。
int n = 8;
int i = 1;
int j = 1;
j = n + 2; //This means that j takes the value 10.
System.out.println (n + " " + i + " " + j ); // 8 1 10 So far, so good.
现在,继续迭代:
while (n > 1)
{
n = n/2;
for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );
j++;
}
对于第一次迭代,我们有,n=8 i=1 j=10
所以循环发生了。n > 0
true
n = n / 2; //n = 4
然后,for
(请注意,它只是将值分配2
给i
):
for (i = 2; i <= 4; i = i+2) //Since n = 4
由于n = 4
,唯一i
可以取的值是2
和4
,那么打印结果是:
4 2 10
4 4 10
之后,j
加一,使其成为j = 11
。的条件while
再次满足,因为n = 4
。n = n/2
使得n
取值2
,所以它进入while again
. 让我们再看一下for:
for (i = 2; i <= 2; i = i+2) //Since n = 2
这一次,唯一i
可以采用2
的值是(请注意,在开始迭代时,值i
会再次重置2
),这就是您得到的打印结果。
2 2 11
在再次迭代之前, makej++
具有j
值12
。
在最后一次迭代n = n/2
中,n = 1
由于 n 是 an int
,但这是在 while 内完成的,所以它再次进入。现在n = 1
循环看起来像这样:
for (i = 2; i <= 1; i = i+2) //Since n = 1
i
设置为2
并且不满足 for 的条件 ( 2 <= 1
is false
)。然后这次没有打印,但在while结束时j
递增。13
在下一次迭代中n = 1
,这意味着while
不满足 ' 条件,因此迭代中断。最后你有n = 1
,i = 2
和j = 13
。那是你得到的最后一张照片。