2012-04-21 2 views
11

У меня есть метод, который делает много проверок и вычислений и возвращает пользовательский класс returnMessage. returnMessage имеет 2 булина и строку. То, что я хочу сделать, это запустить этот метод в цикле while из моего основного класса и получить доступ к объекту returnMessage после того, как цикл while завершится в последний раз.Назначить переменную в Java while-loop условно?

В PHP это будет случай

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

} 

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

Однако попытка присвоить как это дает мне булево ожидать ошибки в Java (там может быть PHP ошибки выше, поздно: D)

+0

Разница между PHP и Java здесь заключается в том, что 'while' в Java * требует * логически типизированного выражения (' someVar = boolExpr' сам по себе является логическим типом). Если назначенная переменная была «bool», тогда она была бы идентичной. Пожалуйста, покажите * текущий * Java-код, поскольку, вероятно, что-то из non-bool назначается. В любом случае, за некоторыми исключениями, я бы рекомендовал * не * использовать эту идиому ... –

ответ

27

Мы должны видеть больше кода, но предполагаю, немного я думаю, что что-то подобное будет работать:

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

} 
if (!returned.finished) { 

} 
1

это возможно, как так

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

} 

или быть более точным (returned=myObject.myMethod()) присваивает возвращаемый объект в returned и вы можете использовать его как обычный вар

2

Хотя приемлемо в PHP, я думаю (я не код в PHP), это считается крайне плохой формой для выполнения задания в условном выражении на Java. (Это связано с тем, что он подвержен ошибкам и очень трудно определить, разница между = и == в середине большого количества кода. Это был преднамеренный выбор, основанный на многолетнем опыте работы с C и C++.)

Как бы то ни было, я не могу полностью следовать вашему коду. Вы говорите: «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, чтобы соответствовать.

+0

это никогда не войдет в цикл while. – Highstead

+0

@Highstead: Исправлено. –

Смежные вопросы