沒有大括號表示循環僅影響循環後面的下一個語句。
所以
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
,爲的條件不滿足(2 <= 1
是false
)。然後這次沒有打印,但j
在該時間結束時增加到13
。
在下一次迭代中,您有n = 1
,這意味着while
的條件未滿足,因此迭代中斷。最後你有n = 1
,i = 2
和j = 13
。這是你獲得的最後一張照片。
使用調試器,分步執行該代碼,以瞭解程序做了什麼。 –
可能最好的辦法是在每個System.out中添加一些額外的文本,而不是完全複製/粘貼。這給了你一些關於哪個System.out被執行的線索。 – kosa