我正在尝试阅读此代码的输出,但它只是对我没有意义。
即使在得知没有大括号的循环只在第一行循环之后,输出仍然毫无意义。有些数字可以,但有些则没有。
我的代码:
int n = 8;
int i = 1;
int j = 1;
j = n + 2;
System.out.println (n + " " + i + " " + j );
while (n > 1)
{
n = n/2;
for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );
j++;
}
System.out.println (n + " " + i + " " + j );
它输出:
8 1 10
4 2 10
4 4 10
2 2 11
1 2 13
我得到8-1-10 和4-2-10
但是之后的任何事情,我都很难过,我不知道计算机如何计算其余部分。
有人会介意一步一步地与我一起完成剩下的输出吗?
提前感谢。
答案 0 :(得分:9)
没有大括号意味着循环只影响循环后面的下一个语句。
所以
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
加1,使其成为j = 11
。由于while
,n = 4
的条件再次得到满足。 n = n/2
使n
获取值2
,因此它会进入while again
。让我们再来看看:
for (i = 2; i <= 2; i = i+2) //Since n = 2
这一次,i
可以采用的唯一值是2
(请注意,i
的值会在开始迭代时再次重置为2
),并且这就是你得到的印刷品。
2 2 11
再次迭代之前,j++
会使j
的值为12
。
在最后一次迭代中,n = n/2
会产生n = 1
,因为n是int
,但这是在while内部完成的,所以它再次进入。现在n = 1
循环看起来像这样:
for (i = 2; i <= 1; i = i+2) //Since n = 1
i
设置为2
且不符合for的条件(2 <= 1
为false
)。然后这次没有打印,但j
在结束时增加到13
。
在下一次迭代中,您有n = 1
,这意味着不满足while
的条件,因此迭代会中断。最后,您有n = 1
,i = 2
和j = 13
。那是你得到的最后一张照片。
答案 1 :(得分:2)
你启动while循环,n = 8,i = 1,j = 10。
start while: (n=8 > 1) is true
n = 4
i = 2 (i <= 4, so do for loop, then change i to i+2=4)
print 4,2,10
i = 4 (i <= 4, so do for loop again, then i = i+2 = 6
print 4,4,10
i = 6 (i <= 4 is false, so exit for)
j++ so j becomes 11
next while:
n = n/2 = 2
i = 2 (i <= 2, so do for loop, then change i to i+2=4)
print 2,2,11
i = 4 (i <= 2 is false, so exit for)
j++ -> j = 12
next while:
n = n/2 = 1
i = 2 (i <= 1 is false, so exit loop)
j++ -> j = 13
exit while.
Final print= n = 1, i = 2 (value assigned in last for loop, loop doesn't get executed so i doesnt get incremented by 2), and j = 13
希望这会有所帮助:)