Dheeraj Upadhyay
Dheeraj Upadhyay

Reputation: 328

Why is while loop treated true if condition is false?

I am trying to do in Java:

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

}

When running this program the output is:

4
3
2
1
0

I am very surprised to see 0 in output. I am new in development. Can anyone justify this?

Upvotes: 0

Views: 664

Answers (7)

Vikrant Kashyap
Vikrant Kashyap

Reputation: 6846

Only because of post decrement operator (i--) will check the condition first then decrease the value of i. Output is giving such. Thank you

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

In first iteration of while loop will check 5 > 0 will be checked after that decrease the value of i and i will become 4 So, Print it 4 not 5.

  • When i = 5 conditional statement will be (5>0) (true) and print 4.
  • i = 4 conditional statement will be (4>0) (true) and print 3.
  • i = 3 conditional statement will be (3>0) (true) and print 2.
  • i = 2 conditional statement will be (2>0) (true) and print 1.
  • i = 1 conditional statement will be (1>0) (true) and print 0.

Now, i became 0 so conditional statement will be (0>0) (False).

So, loop exits.

Upvotes: 1

Tim Biegeleisen
Tim Biegeleisen

Reputation: 520968

In your while condition i-- > 0, the variable i is evaluated first and then decremented.

When i reaches the value 1, it will pass the loop test and then get decremented to 0. This is why the print statement shows 0 in the output.

Here is a mnemonic you can use to keep track of how the decrement and increment operators work:

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

Output:

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

Upvotes: 5

Debosmit Ray
Debosmit Ray

Reputation: 5403

The post-decrement operator -- is like a post-paid service. Like a credit card, first you use, then you pay.

I thought I can give you a real-life idea of what really is occurring in this statement, when i == 1

while(i-- >0) 

So, first you check if i(1)>0. 1>0 So, yes it is. Right after this statement is done, i becomes 0. Then, you print that value.

Alternatively, you might also get this intuition by noticing that although your loop started with i=5, the value 5 never got printed.

Upvotes: 2

Mohit
Mohit

Reputation: 522

Postdecrement/Increment operator works on the principle "Use first and then Change"

Initially value of i=5, when it enters while loop it will compare value of i first and then it prints the decremented value. Here i will show you each iteration along with checks performed in each iteration,

  1. Now value of i=5(in memory), inside while(5>0), it prints 4.

  2. Now value of i=4(in memory), inside while(4>0), it prints 3.

  3. Now value of i=3(in memory), inside while(3>0), it prints 2.

  4. Now value of i=2(in memory), inside while(2>0), it prints 1.

  5. Now value of i=1(in memory), inside while(1>0), it prints 0.

Hope now you are clear to go ahead. Gud Luck.

Upvotes: 2

SomeJavaGuy
SomeJavaGuy

Reputation: 7347

Simply, because you compare i>0 and decrement i afterwards.

// 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);
}

the loop will behave like the following.

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

As you can see the value you compare to 0 is allways higher then the one you are outputing. This happens due to how the -- operator works. If it´s preceding to the i as --i it will decrement the variable i first and return it´s value afterwards. If it´s not preceding as in your case i-- you will have the value of i returned first and i beeing decremented afterwards.

Upvotes: 4

Eran
Eran

Reputation: 393781

Since you are using the post-decrement operator in the while loop, when i is 1, i-- returns 1, and then inside the loop you get 0 when you print i for the last time.

Upvotes: 1

Raghu Nagaraju
Raghu Nagaraju

Reputation: 3288

To get desired output try this

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

}

Upvotes: -2

Related Questions