Assign variable in Java while-loop conditional?
Solution 1
We need to see more of your code, but guessing a little I think something like this would work:
ReturnMessage returned;
while (!(returned = myObject.myMethod()).finished) {
}
if (!returned.finished) {
}
Solution 2
A while loop checks a conditional. Here's another example that can come handy:
public class test {
public static void main(String[] args) {
String line;
while((line = readFromFile())!=null){
//do something with var 'line'
System.out.println(line);
break;
}
}
static String readFromFile(){
return "test string";
}
}
Solution 3
While acceptable in PHP, I guess (I don't code in PHP), it is considered extremely bad form to do an assignment within a conditional in Java. (This is because it is error prone and very hard to spot, the difference being between = and == in the middle of a lot of code. This was a deliberate choice based on years of experience with C and C++.)
As it is, I can't quite follow your code. You say "returnMessage has 2 booleans and a String" but the test, as I understand it in PHP, is myObject->myMethod()->finished != null
and returned
gets set to the value of finished
, but then you go and test $returned -> finished
which is the same as myObject->myMethod()->finished->finished
. Sorry if I misunderstand PHP syntax.
The general recommendation in Java would be more along the lines of:
ReturnMessage returned = myObject.myMethod().getFinished();
while (returned != null) {
...
returned = myObject.myMethod().getFinished(); // or did you mean myObject.myMethod();
}
if (!returned.finished) { // or, better: if (!returned.isFinished())
...
}
If I misunderstood the PHP, let me know and I'll fix the Java code to match.
Solution 4
this is possible like so
while( (returned=myObject.myMethod()).isFinished()){
}
or to be more precise (returned=myObject.myMethod())
assigns the object returned to returned
and you can use it like a normal var
LiamRyan
Updated on July 09, 2022Comments
-
LiamRyan almost 2 years
I have a method that does a lot of checking and computation and returns a custom class, returnMessage. returnMessage has 2 booleans and a String. What I want to do is run this method in a while loop from my main class and have access to the returnMessage object after the while loop terminates for the last time.
In php this would be a case of
while ( $returned = myObject->myMethod()->finished ) { } if( $returned -> finished == FALSE) { ... }
However trying to assign like this gives me a boolean expected error in java (there might be php errors in the above, it's late :D )
-
Highstead almost 12 yearsthis would never enter the while loop.
-
Michael over 5 yearsDoes this actually compile? I'm using Java 7 and the syntax is incorrect.
line
must be defined before the loop. -
SparkZeus over 5 years@Michael Thanks for pointing this out. 'line' should be defined before the loop but can be initialised inside the while condition.