看看这种特殊方法的输出对我来说很困惑。我正试图弄清楚它在做什么。
这是方法:
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
答案 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
语句中运行代码。换句话说,只要if
是j*i
(3
,3
,6
,{{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=2
和j=1
ifs
的所有3个都是假的。
你有
j=1
i=1
1*1 % 3
,1
1 != 0
,true
!(true)
,false
和
j=2
i=1
2*1 % 3
,2
2 != 0
,true
!(true)
,false
终于
j=3
i=1
3*1 % 3
,0
0 != 0
,false
!(false)
,true
所以你打印出答案
如果你想看到我想移动的所有内容
System.out.println("J is " + j);
System.out.println("I is " + i);
在ifs
之外的那种方式,它为循环的每次迭代打印