Java 如果条件为false,为什么while循环被视为true?

Java 如果条件为false,为什么while循环被视为true?,java,Java,我正在尝试用Java做以下工作: int i=5; while(i-- >0) { System.out.println(i); } 运行此程序时,输出为: 4 3 2 1 0 我很惊讶地看到输出为0。我是新手。有人能证明这一点吗?很简单,因为你会比较i>0和之后的减量i // If I is 1, you compare 1>0 and decrement i afterwards. // This is how the postdecrement operator w

我正在尝试用Java做以下工作:

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

}
运行此程序时,输出为:

4
3
2
1
0

我很惊讶地看到输出为0。我是新手。有人能证明这一点吗?

很简单,因为你会比较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 as-i之前,它将首先递减变量i,然后返回它的值。如果它不在前面,如您的例子i-您将首先返回i的值,然后递减。

在while条件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);
}
当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);
输出:


由于您在while循环中使用后减量运算符,当i为1时,i-返回1,然后在循环中最后一次打印i时,您得到0。

仅因为后减量运算符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);

}
在while循环的第一次迭代中,将检查5>0,然后减少i的值,i将变为4,因此,打印它4而不是5。 什么时候 i=5条件语句将为5>0真,并打印4

i=4条件语句将为4>0真,并打印3

i=3条件语句将为3>0真,并打印2

i=2条件语句将为2>0真,并打印1

i=1条件语句将为1>0真,并打印0

现在,我变成了0,所以条件语句将是0>0 False


所以,循环退出

要获得所需的输出,请尝试以下操作

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

}
后减量/增量运算符按照先使用后更改的原则工作

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

现在,内存中i=5的值,在5>0时,它打印4

现在,内存中i=4的值,在4>0时,它打印3

现在,内存中i=3的值,当3>0时,它打印2

现在,内存中i=2的值,在2>0时,它打印1

现在,内存中i=1的值,在1>0时,它打印0


希望你现在清楚了,可以继续了。祝你好运。

后减量运营商-就像一个后付费服务。就像信用卡一样,你先用,然后付钱

我想我可以给你一个真实的想法,当I==1时,这个语句中到底发生了什么

所以,首先检查i1是否大于0。1> 所以,是的。这句话刚说完,我就变成了0。然后,打印该值


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

是的,先生,您得到了它,因为今天只有em学习循环。你是对的,我初始化为5。他没有要求“更正代码”,他要求解释当前代码。他仍然认为解释更改代码的方法很有用,OP可能不知道后减量或前减量选项。@Stultuske比较这一点,他可以理解差异。这是一个不错的解决方案downvote@RaghuNagaraju它不能回答所问的问题,所以它不是一个好的“答案”。当然,他可以比较两者,但这并不意味着他会理解。他在寻找解释,而不是解决办法。
while(i-- >0)