2013-02-16 51 views
0

我正在修改我的SCJA考試的分鐘,並且被這個問題和答案混淆了。問題是運行和編譯代碼的結果是什麼。Java模數運算符和PreIncrement - SCJA

public class Test{ 
     public static void main(String args[]){ 
     int counter = 0; 
     for(int i=0; i< 4; ++i){ 
      for(int k=0; k< 4; ++k){ 
       system.out.println("Hello - "+ ++counter); 
       if((k % 4) == 0) 
       break; 
      } 
     } 
     } 
    } 

因此,他們給出的答案是 「HELLO-1」,因爲0%4 = 0 但我的問題是應該K不爲1,因爲它已經預增的?

在此先感謝!

+0

第一次迭代時,k取0值(++ k在每次迭代結束時執行) – 2013-02-16 16:34:29

回答

2

for循環具有以下結構:

for (initialization; condition; update) 

update被循環的每次執行之後執行

因此以下兩個環是相同的:

for (int i = 0; i < 10; i++) { 

for (int i = 0; i < 10; ++i) { 
+0

啊,這一切都有道理!非常感謝你! – 2013-02-16 16:35:23

1

我的問題是應該k不是1,因爲它已預先增加?

++k發生在循環迭代的末端,即if語句之後。

不管它是++k還是k++;在這兩種情況下,第一個值k都是零。

因此,他們給出的答案是"Hello-1"

這顯然是不正確的,因爲counter從不遞增,並在零整個程序停留。

+0

非常感謝NPE - 已清除它!讚賞。 – 2013-02-16 16:35:42

0

K能夠不爲1。 這是因爲當一個for循環運行時,它僅更新它已經執行的所有後循環內的代碼。由於在第一次迭代完成之前循環中斷,因此k保持爲0.