在Java中分配变量,而循环是有条件的?

在Java中分配变量,而循环是有条件的?,java,php,loops,variables,while-loop,Java,Php,Loops,Variables,While Loop,我有一个方法,它执行大量的检查和计算,并返回一个自定义类returnMessage。returnMessage有2个布尔值和一个字符串。我要做的是在我的主类的while循环中运行这个方法,并在while循环最后一次终止后访问returnMessage对象 在php中,这将是一个 while ( $returned = myObject->myMethod()->finished ) { } if( $returned -> finished == FALSE) { ...

我有一个方法,它执行大量的检查和计算,并返回一个自定义类returnMessage。returnMessage有2个布尔值和一个字符串。我要做的是在我的主类的while循环中运行这个方法,并在while循环最后一次终止后访问returnMessage对象

在php中,这将是一个

while ( $returned = myObject->myMethod()->finished )
{

}

if( $returned -> finished == FALSE)
{
...
}

然而,尝试这样分配会在java中给我一个布尔预期错误(上面可能有php错误,已经晚了:D)

这是可能的

while( (returned=myObject.myMethod()).isFinished()){

}

或者更准确地说,
(returned=myObject.myMethod())
将返回的对象分配给
returned
,您可以像普通的var一样使用它,我们需要查看更多的代码,但我想这样做可能会奏效:

ReturnMessage returned;
while (!(returned = myObject.myMethod()).finished) {

}
if (!returned.finished) {

}

虽然在PHP中是可以接受的,但我想(我不使用PHP编写代码),在Java中,在条件中执行赋值被认为是非常糟糕的形式。(这是因为它容易出错,很难发现,在许多代码中间,差异在=和= =之间。这是基于C和C++多年经验的慎重选择。)< /P> 事实上,我不能完全理解你的代码。您说“returnMessage有2个布尔值和一个字符串”,但我在PHP中理解的测试是
myObject->myMethod()->finished!=null
returned
设置为
finished
的值,但是您可以去测试
$returned->finished
,这与
myObject->myMethod()->->finished->finished
相同。对不起,如果我误解了PHP语法

Java中的一般建议将更大致如下:

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())
    ...
}

如果我误解了PHP,请告诉我,我将修复Java代码以匹配。

while循环检查条件。下面是另一个方便的例子:

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";
    }
}

PHP和Java之间的区别在于
而Java中的
需要一个布尔型表达式(
someVar=boolExpr
本身就是一个布尔型表达式)。如果分配的变量是
bool
,则它将是相同的。请显示当前的Java代码,因为很可能正在分配非bool代码。在任何情况下,除了少数例外,我建议不要使用这个习惯用法……它永远不会进入while循环。这真的可以编译吗?我使用的是Java7,语法不正确<代码>行
必须在循环之前定义。@Michael感谢您指出这一点“行”应在循环之前定义,但可以在while条件内初始化。