2012-04-21 12 views
11

Mam metodę, która wykonuje wiele sprawdzania i obliczeń i zwraca niestandardową klasę returnMessage. returnMessage ma 2 booleans i String. To, co chcę zrobić, to uruchomić tę metodę w pętli while z mojej głównej klasy i mieć dostęp do obiektu returnMessage po tym, jak pętla while zakończy się po raz ostatni.Przypisanie zmiennej warunkowej Java w pętli while?

w PHP byłby to przypadek

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

} 

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

jednak próbuje przypisać jak to daje mi błąd logiczny spodziewać w java (nie może być php błędy w powyższym, że jest późno: D)

+0

Różnica między PHP a Javą polega na tym, że 'while' w Javie * wymaga * wyrażenia typu boolean (' someVar = boolExpr' samo jest wyrażeniem typu boolean). Jeśli przypisana zmienna to 'bool', to będzie identyczna. Proszę pokazać * bieżący * kod Java, ponieważ jest prawdopodobne, że przypisano coś nie-bool. W każdym razie, z kilkoma wyjątkami, polecam * nie * używając tego idiomu ... –

Odpowiedz

27

Musimy zobaczyć więcej kodu, ale trochę zgadywania Chyba coś jak to będzie działać:

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

} 
if (!returned.finished) { 

} 
1

jest to możliwe jak tak

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

} 

lub dokładniej (returned=myObject.myMethod()) przypisuje obiekt powrócił do returned i można go używać jak normalny var

2

Podczas przyjęcia w PHP, I guess (nie kod w PHP), Uznaje się za wyjątkowo złą formę wykonanie przydziału w warunkowym w Javie. (Jest to spowodowane tym, że jest podatny na błędy i bardzo trudny do zauważenia, różnica między = i == w środku dużej ilości kodu. To był celowy wybór oparty na latach doświadczenia z C i C++.)

W tej chwili nie mogę całkowicie przestrzegać Twojego kodu. Mówisz "returnMessage ma 2 booleans i string", ale test, jak rozumiem to w PHP, to myObject->myMethod()->finished != null i returned zostaje ustawiony na wartość finished, ale potem idziesz i testujesz $returned -> finished, który jest taki sam jak myObject->myMethod()->finished->finished. Przepraszam, jeśli źle zrozumiałem składnię PHP.

Ogólnym zaleceniem w Javie byłoby bardziej wzdłuż linii:

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

Gdybym źle PHP, daj mi znać, a ja naprawić kod Java, aby dopasować.

+0

to nigdy nie wejdzie do pętli while. – Highstead

+0

@Highstead: Naprawiono. –