基本上输出显示为i = 11
,尽管每次我尝试对其进行跟踪时,答案都会9
随我出现。我一直在玩一些代码,以查看多余的2来自何处。在这种情况下3/4
,但我无法找到任何增量状态,i
尽管它4
在此时已变为。有人可以帮我解释一下吗?
public class out2 {
public static void main(String args[]) {
int i = 0, j = 7;
boolean f = true;
while (i <= 4) {
switch (--j) {
case 1:
case 2:
i = f ? i + 7 : i + 1;
break;
case 3:
case 4:
i = !f ? j++ : j--;
break;
case 5:
case 6:
i = (i == j) ? i - 1 : i + 1;
}
}
System.out.println("j=" + j + "\ni=" + i);
}
}
使用调试器逐步执行此操作将向您显示...
循环1
--j
所以j
递减
i = (i == j) ? i - 1 : i + 1;
= i+1
...所以i=1
(i = 0 + 1)i
不等于j
循环2
--j
= 5
i = (i == j) ? i - 1 : i + 1;
= i+1
...所以i=2
(i = 1 + 1)i
不等于j
循环3
--j
= 4
i = !f ? j++ : j--;
= j--
= i=j; j++
=i=j; j=j-1
...所以i=4
(i = j)&j=3
(j = 4 -1在分配给i之后发生)!f
是错误的
循环4
--j
= 2
i = f ? i + 7 : i + 1;
= i+7
...所以i=11
(I = 4 + 7)&j=2
为f
是真
...你怎么得到9?
笔记
!true
只是说“不正确”,是正确的;当然不是。i=j++
分配j
到i
然后递增j
i=++j
增量,j
然后分配给i
i = true ? j++ : j--
将分配j
给i
然后递增j
,这就是为什么您得到9的原因,@ GameDroids发现您没有分配给i
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句