Java 如果条件为false,为什么while循环被视为true?
我正在尝试用Java做以下工作: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
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)