Java模运算符和PreIncrement - SCJA

时间:2013-02-16 16:30:30

标签: java

我正在修改我的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;
            }
         }
       }
    }

所以他们给出的答案是&#34; Hello-1&#34;因为0%4 = 0 但我的问题是,由于它已经预先递增,因此不应该是1吗?

提前致谢!

3 个答案:

答案 0 :(得分:2)

for循环具有以下结构:

for (initialization; condition; update)

{/ 1}}在每次执行循环后执行

因此以下两个循环是相同的:

update

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

答案 1 :(得分:1)

  

我的问题是k不应该是1,因为它已经预先递增了吗?

++k发生在循环迭代结束时,即之后 if语句。

它是++k还是k++没有区别;在任何一种情况下,k的第一个值都为零。

  

所以他们给出的答案是"Hello-1"

这显然是不正确的,因为counter永远不会增加,并且在整个程序中保持为零。

答案 2 :(得分:0)

k不能是1。 这是因为当for循环运行时,它只会在循环中执行完所有代码后才会更新。由于在第一次迭代完成之前循环中断,因此k保持为0。