2013-02-16 13 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.