2016-04-07 150 views

回答

5

在你while条件i-- > 0,可变i评价第一,然后递减。

i达到值1时,它将通过循环测试,然后递减到0。这就是为什么打印语句在输出中显示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 
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值高于百达,那么你outputing之一。这发生在--运营商的工作方式。如果它在i之前为--i,则它将首先递减变量i,然后返回它的值。如果它不在您的案例i--之前,您将首先返回i,然后i后面的值减少。

1

由于您使用的是递减后的运营商在while循环中,当i为1时,i--返回1,然后在循环中您上次打印i时得到0。

+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将检查后减少ii值将成为4因此,打印45。 当 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成为0所以条件语句将(0>0))。

所以,Loop退出。

-2

,从而获得所需的输出试试这个

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

} 
+1

他没有要求'纠正的代码',他要求解释当前的代码 – Stultuske

+1

仍然认为它是有用的解释方法来改变它,OP可能不知道有关post或pre decrement选项。 – Draken

+0

@Stultuske比较这一点,他可以理解差异。它不是糟糕的解决方案downvote –

2

后减量/增量操作的原则作品“使用,然后再更改”

起初我= 5的值,当它进入while循环会先比较我的值,然后输出递减的值。在这里,我将说明与在每次迭代中执行的检查沿着每次迭代中,

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

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

  3. 现在i = 3(在内存中),内部while(3> 0)

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

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

希望现在你清楚不前。 Gud Luck。

2

滞后递减操作--像后付费服务。就像信用卡一样,首先你用,然后你付钱。

我想我可以给你真正在这个声明中发生的真实生活理念,当i == 1

while(i-- >0) 

所以,首先你检查是否i(1)>01>0所以,是的。在声明完成之后,i变为0.然后,打印该值。

或者,您也可以通过注意到虽然您的循环以i=5开头,但值5从未打印。