如果condition为false,为什么while循环处理为true?

时间:2016-04-07 06:32:34

标签: java

我想用Java做的事情:

int i=5;
while(i-- >0) {
   System.out.println(i);

}

运行此程序时输出为:

4
3
2
1
0

我很惊讶在输出中看到0。我是新的发展。有人可以证明这一点吗?

7 个答案:

答案 0 :(得分:5)

while条件i-- > 0中,变量i首先评估 ,然后递减。

i达到值1时,它将通过循环测试,然后递减到0。这就是print语句在输出中显示0的原因。

这是一个助记符,可用于跟踪减量和增量运算符的工作方式:

int i = 5;
System.out.println("When i = 5 then:");
System.out.println("i-- is " + i--);
i = 5;
System.out.println("--i is " + --i);

<强>输出:

When i = 5 then:
i-- is 5
--i is 4

答案 1 :(得分:4)

简单地说,因为您之后比较i>0并递减i

// If I is 1, you compare 1>0 and decrement i afterwards.
// This is how the postdecrement operator works
while(i-- >0) {
   System.out.println(i);
}

循环将表现如下。

is i=5 > 0?
decrement i to 4
output i = 4.
is i=4 > 0?
decrement i to 3
output i = 3.
...
and so on

正如您所看到的,与0比较的值总是高于您输出的值。这是因为--运算符的工作原理。如果它在i之前作为--i,它将首先递减变量i并在之后返回它的值。如果它不在您的案例i--之前,那么您将首先返回i的值,之后将i减少。

答案 2 :(得分:2)

后递减/递增操作符的工作原则是&#34;先使用然后更改&#34;

最初i = 5的值,当它进入while循环时,它将首先比较i的值,然后打印减少的值。在这里,我将向您展示每次迭代以及在每次迭代中执行的检查,

  1. 现在i = 5(在内存中)的值,在(5> 0)内,它打印4。

  2. 现在i = 4(在内存中)的值,在(4> 0)内,它打印3。

  3. 现在i = 3(在内存中)的值,在(3> 0)内,它打印2。

  4. 现在i = 2(在内存中)的值,在(2> 0)内,它打印1。

  5. 现在i = 1(在内存中)的值,在(1> 0)内,它打印为0.

  6. 希望你现在明确继续前进。 Gud Luck。

答案 3 :(得分:2)

后递减运算符-- 就像后付费服务 。就像信用卡一样,首先使用,然后付款。

当我i == 1

时,我想我可以真实地了解这句话中究竟发生了什么。
while(i-- >0) 

所以,首先检查一下i(1)>01>0所以,是的。在此语句完成后,i变为0.然后,您打印该值。

或者,您可能也会注意到,虽然您的循环以i=5开头,但您可能也会得到这种直觉,但值5从未打印过。

答案 4 :(得分:1)

由于你在while循环中使用了post-decrement运算符,当i为1时,i--返回1,然后在循环内部,当你打印i时得到0最后一次。

答案 5 :(得分:1)

仅因为后期递减运算符(i--)将首先检查条件然后降低i的值。输出是这样的。谢谢

int i=5; //initialize with 5
while(i-- >0) { //post decrements operator so, check condition first then decrease the value. 
   System.out.println(i);

}
  1. while循环的第一次迭代中,检查5 > 0将会在检出i并且i变为4之后进行检查因此,打印4而不是5。 什么时候 i =5条件语句将为(5>0) true )并打印4

    i =4条件语句将为(4>0) true )并打印3

    i =3条件语句将为(3>0) true )并打印2

    i =2条件语句将为(2>0) true )并打印1

    i =1条件语句为(1>0) true )并打印0

  2. 现在,i变为0因此,条件语句将为(0>0)错误)。

    所以,Loop退出。

答案 6 :(得分:-2)

要获得所需的输出,请尝试此

while(--i >0) {
   System.out.println(i);

}