web-dev-qa-db-ja.com

Java while-loop conditional?

多くのチェックと計算を行い、カスタムクラスreturnMessageを返すメソッドがあります。 returnMessageには2つのブール値と1つの文字列があります。私がやりたいことは、メインクラスからwhileループでこのメソッドを実行し、whileループが最後に終了した後にreturnMessageオブジェクトにアクセスできるようにすることです。

PHPでは、これは

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

}

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

ただし、このように割り当てようとすると、Javaでブール型の予期されるエラーが発生します(上記ではphpエラーが発生する可能性があります。遅くなります:D)

17
LiamRyan

私たちはあなたのコードをもっと見る必要がありますが、少し推測すると、次のようなものがうまくいくと思います:

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

}
if (!returned.finished) {

}
38
Óscar López

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

PHPでは許容できると思いますが(私はPHPでコーディングしていません)、Javaの条件内で代入を行うのは非常に悪い形式と考えられています。 (これはエラーが発生しやすく、見つけるのが非常に難しいためです。=と==の違いは、多くのコードの真ん中にあります。これは、CおよびC++での長年の経験に基づく意図的な選択でした。)

現状のままでは、コードを完全に追跡することはできません。 「returnMessageには2つのブール値と1つの文字列がある」と言いましたが、PHPで理解しているように、テストはmyObject->myMethod()->finished != nullであり、returnedfinishedの値に設定されます。しかし次に行って、myObject->myMethod()->finished->finishedと同じ$returned -> 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コードを一致させるように修正します。

3
Old Pro

これはそのように可能です

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

}

またはより正確に(returned=myObject.myMethod())は、返されたオブジェクトをreturnedに割り当て、通常のvarのように使用できます

1
ratchet freak