Two Laptop Bag*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Flow Control and Evaluating boolean Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Flow Control and Evaluating boolean" Watch "Flow Control and Evaluating boolean" New topic
Author

Flow Control and Evaluating boolean

Shailendra Guggali
Ranch Hand

Joined: Feb 01, 2001
Posts: 86
Check the foll code:
class Trial
{ public static void main(String args[ ] )
{ boolean b = false ; int i = 1 ;
do
{ i++ ; } while (b=!b) ;
System.out.println(b = !b); System.out.println( i );
}
}
the result is i = 3. HOW ???
it goes through the do loop , i becomes 2, then it checks for
while : b = !b should evaluate to b = true --- and then it should enter a perpetual loop. but this doesn't happen - WHY?? then what is the boolean condition in the while loop?? if it is false then i should be = 2.
how does it become 3 ???

------------------
Pravin Panicker
Ranch Hand

Joined: Oct 05, 2000
Posts: 62
First run :
i = 2
while (b=!b) Here b is assigned !false ie true
So it will loop again
Second run
i = 3
while (b=!b) Now b is assigned !true ie false
Therefore while exits
So you get i = 3
And System.out.println will print true


Pravin R Panicker<br />SCJP,SCWCD
Shailendra Guggali
Ranch Hand

Joined: Feb 01, 2001
Posts: 86
Thanx pravin -
how could i miss that boolean b will also change in the
subsequent loop
shail
Gaurav Mantro
Ranch Hand

Joined: Sep 08, 2000
Posts: 61
Originally posted by Pravin Panicker:
First run :
i = 2
while (b=!b) Here b is assigned !false ie true
So it will loop again
Second run
i = 3
while (b=!b) Now b is assigned !true ie false
Therefore while exits
So you get i = 3
And System.out.println will print true

I am missing something here, will the while loop evaluate value of b or of expression b=!b.
I am confused, I know the answer mentioned above is correct but just wanna know how while works in java ?

----------------------<br />regards.<br /><a href="http://www.mantrotech.com/editors/gaurav_mantro.asp" target="_blank" rel="nofollow">Gaurav Mantro</a><br /><a href="http://www.mantrotech.com/technology/java/index.asp" target="_blank" rel="nofollow">Java Information Portal</a> - <a href="http://www.mantrotech.com/technology/java/index.asp" target="_blank" rel="nofollow">http://java.mantrotech.com</a>
Lee Clarke
Greenhorn

Joined: Jan 18, 2001
Posts: 18
Gaurav,
What you might be missing is the the while(b=!b) only contains one = sign its a common mistake that I am just braking my self which is to mistake things like (b=!b) as (b==!b) if you solve for (b=!b) it and b=true it workd out like this
b= (!true)
b=false there fore it would be the same as while(false) which will always exit the while.
Hope that helps!
Lee


Lee Clarke - SCJP
Gaurav Mantro
Ranch Hand

Joined: Sep 08, 2000
Posts: 61
Thanks Lee.
I see your point of = and ==, let me try to explain what I am trying to point out
case 1. while( (b=!a) )
case 2. while( (b==!a))
In case 1 the result of inner expression (b=!a), should be true if b can be assigned value of !a.
In case 2 the result of inner expression (b==!a), should be true if b is equal to !a.
So what I am trying to say is how does while(b=!a) treated in java?
Does it assign the value to b and check whether b is true or false?
OR
It checks whether the expression (b=!a) was true or not, I mean if there was a condition say (b>a) where b=5 and a is 3 will it return true?
I am a C/C++ background, and I think in C/C++ statement
like while(a=5) will put it in infinite loop.
Lee Clarke
Greenhorn

Joined: Jan 18, 2001
Posts: 18

case 1. while( (b=!a) )
case 2. while( (b==!a))
In case 1 the result of inner expression (b=!a), should be true if b can be assigned value of !a.
In case 2 the result of inner expression (b==!a), should be true if b is equal to !a.
So what I am trying to say is how does while(b=!a) treated in java?
Does it assign the value to b and check whether b is true or false?
OR
It checks whether the expression (b=!a) was true or not, I mean if there was a condition say (b>a) where b=5 and a is 3 will it return true?
I am a C/C++ background, and I think in C/C++ statement
like while(a=5) will put it in infinite loop.

humm lost to answer here..I'll take a shot at each one..
part of the issue might be the order of prescidence of the operators, ! is higher then =
also remember a while() must evaluate to a boolean it can only result in true or false.
ok while(b=!a) will evaluate to the result of the equasion and set b to the value !a or another way to state it would be while(!a) but then your leaving out the assignment of b.
"(b>a) where b=5 and a is 3 will it return true?" yep that would be true and unless b or a changes, you would get an infinant loop.

while(a=5) : on this it wont compile because a=5 does not evaluate to a boolean, now while(a==5) will evaluate to a boolean the results depending on the value of a.
Does that make more since?
Lee
[This message has been edited by Lee Clarke (edited February 02, 2001).]
[This message has been edited by Lee Clarke (edited February 02, 2001).]
Gaurav Mantro
Ranch Hand

Joined: Sep 08, 2000
Posts: 61
Thanks Lee.
You helped me to understand this. Let me try to put down what I understood and just let me know if I got it right
1. While works on logical comparisons since output is always boolean e.g. ==, >, < else.
2. It will also work on assignment operators as long as result operands is boolean. e.g. while(a=true/false) will work and while(a=3) will not work.
Thanks for your time and patience to help me understand this, but it really helped me to clarify a basic thing.
Lee Clarke
Greenhorn

Joined: Jan 18, 2001
Posts: 18
Glad to help Gaurav!
I can understand how confusing these simple things can be since they work a bit diferently then other languages. I think explaining it even made it more solid on my end! good rule if you think you understand it try explaining it! )

Good luck!
Lee
 
Don't get me started about those stupid light bulbs.
 
subject: Flow Control and Evaluating boolean
 
Similar Threads
Cant understand programm
A simple q. abt. LOOP
Question ID :952739442300
while loop
It should be an Infinite loop.......