2015-09-19 192 views
1

我必須從一個有2個foor循環的練習簿和一個if語句,我不能理解輸出的代碼!所以我猜測我不明白for循環如何工作混淆for循環的輸出

class Multifor { 

    public static void main(String[] args) { 

     for (int x = 0; x < 4; x++) { 

      for (int y = 4; y > 2; y--) { 
       System.out.println(x + " " + y); 
      } 
      if (x == 1) { 
       x++; 
      } 
     } 
    } 
} 

輸出爲:

0 4, 
0 3, 
1 4, 
1 3, 
3 4, 
3 3, 

第一個問題:X傳來如何兩倍0的輸出,如果在for循環它由1每次代碼運行到循環時間增加,由代碼到達代碼的System.out.println部分的時間爲1,再加上增量在if語句中,如果x == 1,則爲1;第二個問題:如果y = 4,並且它每次運行for循環時遞減1如何輸出第一個3,然後是4?等等,如果我沒有看到y變量的任何增量?

+0

搶鉛筆和紙張或通過調試器中運行,並通過線遵循它行。沒有什麼太複雜的,所以手動手動不應該是一個問題,再加上你會回答你自己的問題。 – csmckelvey

回答

4

第一個問題:怎麼來的X是在兩次輸出0,如果在for循環 它是由1每次代碼運行到循環,由 時間碼reachs的System.out的時間增加。 println的部分代碼是 alredy 1,如果x == 1,則在if語句中加上1的增量; 這將使X 2.

每次輸入你的主要x循環時間,你的內循環的第二輸出y循環兩次。

另外,當您第一次輸入循環時,x的值是您在for聲明中分配的值。

這就是爲什麼x的值僅在兩次打印中更改一次的原因。

第二個問題:如果y = 4,並且每次運行 循環時遞減1,輸出先是3,然後是4?等等,如果我不 看到y變量的任何增量?

y的輸出是4然後3.

0 4 
0 3 
1 4 
1 3 
3 4 
3 3 
+0

是的,你的權利從4開始,但y值又是如何從3增加到4再次增加? –

+0

當你回到循環時,由於'int y = 4',y的值會回到4 ...如果我的回答對你有幫助,請不要猶豫,驗證它:) –

+0

是的,我現在明白了,非常感謝,你的幫助很大! –

2

對於x和y的內循環將運行兩次每一個值。 首先,當y = 4時,y = 3,當y變成2時,條件變爲false,因此它出現在內部循環中,然後它將檢查「是否條件」,即x是否等於1還是不。如果x等於1,則x的值將遞增爲2. 這一直持續到外循環中的條件爲真。 所以輸出會是這樣:

when x=0 y=4,3 when x=1 y=4,3 when x=3 y=4,3

輸出的順序將是: 0 4 0 3 1 4 1 3 3 4 3 3