Java - 方法的输出

时间:2012-05-08 13:41:38

标签: java

看看这种特殊方法的输出对我来说很困惑。我正试图弄清楚它在做什么。

这是方法:

for (int i = 0; i < 4; i ++) {
    for (int j = 0; j < 9; j++) {
    if (j==5) {
        break;
    }
    if ((j==0) || (i==0)) {
        continue;
    }
    if (!((j*i % 3) != 0)) {
    System.out.println(j*i);
    }
}

}

我知道输出是什么,但我仍然不确定它是如何工作的,这就是我在这里问的原因。所以,这个方法将经历j直到它达到5,然后它就会中断。

然后它增加i,j为0. J!= 5因此它不会中断,j == 0所以继续 但是J变为3而我是1.这就是我迷失的地方。 3来自哪里?

我用它来打印幕后发生的事情

    public static void tester() {
    for (int i = 0; i < 4; i ++) {
        for (int j = 0; j < 9; j++) {
            if (j==5) {
                System.out.println("j == 5, breaking");
                break;
            }
            if ((j==0) || (i==0)) {
                System.out.println("J is " + j);
                System.out.println("I is " + i);
                System.out.println("j or i == 0, continuing");
                continue;
            }
            if (!((j*i % 3) != 0)) {
                System.out.println("J is " + j);
                System.out.println("I is " + i);
                System.out.println(j*i);
            }
        }
        System.out.println();
    }
}

输出如下:

J is 0

I is 0

j or i == 0, continuing

J is 1

I is 0

j or i == 0, continuing

J is 2

I is 0

j or i == 0, continuing

J is 3

I is 0

j or i == 0, continuing

J is 4

I is 0

j or i == 0, continuing

j == 5, breaking


J is 0

I is 1

j or i == 0, continuing

J is 3

I is 1

3

j == 5, breaking


J is 0

I is 2

j or i == 0, continuing

J is 3

I is 2

6

j == 5, breaking


J is 0

I is 3


j or i == 0, continuing

J is 1

I is 3

3

J is 2

I is 3

6

J is 3

I is 3

9

J is 4

I is 3

12

j == 5, breaking

3 个答案:

答案 0 :(得分:1)

当j = 2且i = 1时,你有!((j*i % 3) != 0)返回false,所以它不会进入那个条件(也没有其他)并且没有输出。这就是它跳过j = 2的原因。当j == 2时添加额外的System.out.println(),您会看到它出现。

答案 1 :(得分:1)

3(以及之后的6)正是从​​这段代码中发生的......

        if (!((j*i % 3) != 0)) {
            System.out.println("J is " + j);
            System.out.println("I is " + i);
            System.out.println(j*i);
        }

有效地!((j*i % 3) != 0)所说的是,当j*i/3的余数为0时,它会在此if语句中运行代码。换句话说,只要ifj*i336,{{1}的倍数,它就会运行此9代码}})

逻辑很难遵循 - 最好这样写它......

12

以原始方式,所有 if ((j*i % 3) == 0) { System.out.println("J is " + j); System.out.println("I is " + i); System.out.println(j*i); } 符号和多个括号/括号使其难以阅读。

答案 2 :(得分:1)

您的下一个输出位于i=1 j = 3的原因是因为j=2j=1 ifs的所有3个都是假的。

你有

  1. j=1 i=1
  2. 1*1 % 31
  3. 1 != 0true
  4. !(true)false
    1. j=2 i=1
    2. 2*1 % 32
    3. 2 != 0true
    4. !(true)false
    5. 终于

      1. j=3 i=1
      2. 3*1 % 30
      3. 0 != 0false
      4. !(false)true
      5. 所以你打印出答案

        如果你想看到我想移动的所有内容

        System.out.println("J is " + j); 
        System.out.println("I is " + i);
        

        ifs之外的那种方式,它为循环的每次迭代打印