2017-10-18 158 views
-1

输出打印4 2.我明白为什么“y”是4,但我很困惑为什么“z”是2.不应该++将“z”的值增加1?Java while while循环混淆输出

int x = 6; 
int y = 1; 
int z = 0; 

while (2 * y <= x) { 
    y = y * 2; 
    z++; 
} 
System.out.println(y + " " + z); 
+0

while循环将执行两次 – Lokesh

+0

'++'不是一次性事物。 'z'从0开始,然后增加1 2次。 – Oleg

+0

你期望'z'是什么? –

回答

0

在第一次迭代中y为1,因此满足2*y <= x。和y = y*2其为2和z变为1
再次2*y<=x满足因为2*y是4和y= y*2变为8和z++变为2
结果输出4和2

-2

我没有看到在程序中的任何错误。循环将运行2次:

首先,z将是0+1=1,之后它将是1+1=2

2*Y8变得不满足条件,所以最终输出应是Y4Z2

+0

Y永远不会成为8它的价值将是4 – Lokesh

+0

Sry我的意思是2 * y将8 –

0

谢谢大家的帮助,我一直在想。我一直在犯的错误是从条件中获得“y”的价值,并在声明中使用它。换句话说,不是从y = 1 * 2开始; ,我将开始第二次迭代y = 2 * 2;并认为“z”的值是1并且循环在那里结束。感谢c0der对循环内的打印输出的建议。