2012-04-21 14 views
11

Ho un metodo che esegue molti controlli e calcoli e restituisce una classe personalizzata, returnMessage. returnMessage ha 2 booleani e una stringa. Quello che voglio fare è eseguire questo metodo in un ciclo while dalla mia classe principale e avere accesso all'oggetto returnMessage dopo che il ciclo while si è interrotto per l'ultima volta.Assegnare una variabile in condizionale durante il ciclo Java?

in PHP questo sarebbe un caso di

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

} 

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

Tuttavia tentando di assegnare come questo mi dà un errore booleano atteso in java (ci potrebbero essere errori PHP in quanto sopra, è tardi: D)

+0

La differenza tra PHP e Java qui è che 'while' in Java * richiede * un'espressione booleana (' someVar = boolExpr' è a sua volta un'espressione booleana). Se la variabile assegnata fosse un 'bool', sarebbe identica. Si prega di mostrare il * codice Java * corrente in quanto è probabile che venga assegnato qualcosa di non bool. In ogni caso, con poche eccezioni, raccomanderei * non * di usare questo idioma ... –

risposta

27

Abbiamo bisogno di vedere più del vostro codice, ma indovinare un po 'penso che qualcosa di simile potrebbe funzionare:

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

} 
if (!returned.finished) { 

} 
1

questo è possibile in questo modo

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

} 

o per essere più precisi (returned=myObject.myMethod()) assegna l'oggetto restituito returned e si può utilizzare come un normale var

2

Mentre accettabile in PHP, immagino (io non il codice in PHP), è considerata una forma estremamente negativa eseguire un compito all'interno di un condizionale in Java. (Questo perché è soggetto a errori e molto difficile da individuare, la differenza è tra = e == nel mezzo di un sacco di codice. Questa è stata una scelta deliberata basata su anni di esperienza con C e C++.)

Così com'è, non riesco a seguire il tuo codice. Dici "returnMessage ha 2 booleani e una stringa" ma il test, come ho capito in PHP, è myObject->myMethod()->finished != null e returned viene impostato sul valore di finished, ma poi vai a testare $returned -> finished che è lo stesso di myObject->myMethod()->finished->finished. Scusa se non capisco la sintassi di PHP.

La raccomandazione generale in Java sarebbe più lungo le linee di:

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

Se ho capito male il PHP, fatemelo sapere e Riparerò il codice Java da abbinare.

+0

questo non entrerebbe mai nel ciclo while. – Highstead

+0

@Highstead: corretto. –

Problemi correlati