2012-08-15 45 views
1
PrintStream out = System.out; 

    int sum = 0; 
    for(int i = 0; i<5; i++) 
     for(int j=i; j<5; j++) 
      sum++; 
    out.println(sum); 

輸出:15.我不知道這是如何得到15.我試圖解決它在我的頭上,我不斷收到25幫助我瞭解在這個循環中會發生什麼Java中

如果我們忽略第二for循環,並把sum ++放在第一個for循環中,你得到5.但是我們如何從2nd for循環獲得15?

PrintStream out = System.out; 

    int sum = 0; 
    for(int i = 0; i<5; i++) 
     for(int j=i; j<5; j++); 
      sum++; 
    out.println(sum); 

輸出:1。之後進行陳述。它會停止嗎?

+2

使用花括號'{}'爲你和清晰的緣故請 – ant 2012-08-15 23:27:39

+1

這功課? – 2012-08-15 23:27:52

回答

6
i = 0 => j goes from 0 to 4 => sum = 5 
i = 1 => j goes from 1 to 4 => sum = 5 + 4 = 9 
i = 2 => j goes from 2 to 4 => sum = 9 + 3 = 12 
i = 3 => j goes from 3 to 4 => sum = 12 + 2 = 14 
i = 4 => j goes from 4 to 4 => sum = 14 + 1 = 15 

你的第二個代碼片段不能編譯,因爲它是。

編輯

現在你的第二個片斷編譯:

for(int i = 0; i<5; i++) 
    for(int j=i; j<5; j++); 
     sum++; 

相當於(這就是爲什麼你應該總是使用大括號):

for(int i = 0; i<5; i++) { 
    for(int j=i; j<5; j++) { 
    } 
} 
sum++; 

這就解釋了爲什麼它輸出1.

+0

這是完美的非常感謝!我修復了第二回路 – user193113 2012-08-15 23:33:01

0

該循環基本上創建了一個三角形數字,特別是第五個三角形數字,例如,一些形式n + (n - 1) + ... + 2 + 1

訣竅,那你做理由不看到作爲結果,在第二循環:它只是從i當前值迭代高達5

在內循環的每次迭代中,總和遞增一次。因爲環路特技的,內部循環迭代5次,然後如圖4所示,等:

first iteration of the outer loop: j = 0 to 4 -> 5 increments 
second iteration of the outer loop: j = 1 to 4 -> 4 increments 
... 3 increments 
... 2 increments 
... 1 increment 

5 + 4 + 3 + 2 + 1 = 15

0

的輸出是15,因爲j被初始化到第一個循環的每次迭代中的值i

如果j初始化爲零,則輸出爲25。

0

要得到25,我的

for(int j=i j<5; j++); // inner loop 
     sum++; 

使用nstead

//......here 
for(int j=0 j<5; j++); // inner loop 
     sum++; 

你現在正在做的是 (1+1+1+1+1) + (1+1+1+1) + (1+1+1) + (1+1) + (1)而你想要的是(1+1+1+1+1).. 5 times

附:爲什麼第二個代碼中的循環是for(int j=il j<5; j++); il未定義,即使您之前已在某處定義il,它也會停止在;

+0

我修好了。這是一個錯誤 – user193113 2012-08-15 23:36:39

相關問題