2013-04-22 11 views
60

Mi chiedevo se è possibile assegnare una variabile un valore all'interno di un operatore condizionale in questo modo:assegnare il valore variabile all'interno di se-dichiarazione

if((int v = someMethod()) != 0) return v;

C'è qualche modo per fare questo in Java? Perché so che è possibile nelle condizioni while, ma non sono sicuro se sto sbagliando per l'if-statement o se semplicemente non è possibile.

risposta

93

Le variabili possono essere assegnati, ma non dichiarate all'interno l'istruzione condizionale:

int v; 
if((v = someMethod()) != 0) return true; 
+1

Quindi se avete bisogno della dichiarazione basta comunque posizionare 'someMethod()' davanti alla dichiarazione. 'int v = someMethod()' – wviana

+1

Peccato, nessun oneliner per me :( –

+1

ho l'oneliner>: D –

4

Sì, è possibile assegnare il valore della variabile all'interno se.

io non lo consiglio. Il problema è che sembra un errore comune in cui si tenta di confrontare i valori, ma utilizzare un singolo = anziché == o ===.

Sarà meglio se si fa qualcosa di simile:

int v; 
if((v = someMethod()) != 0) 
    return true; 
0

È possibile assegnare una variabile all'interno di if dichiarazione , ma è necessario dichiararlo prima

0

Perché so che è possibile in mentre conditi ons, ma non sono sicuro se sto sbagliando per l'if-statement o se semplicemente non è possibile.

SUGGERIMENTO: che tipo di tempo e se la condizione dovrebbe essere ??

Se si può fare con il tempo, si può essere fatto con if come weel, come ciascuno di essi si aspettano una condizione booleana.

14

un incarico restituisce il lato sinistro della cessione. quindi sì. è possibile. tuttavia, è necessario dichiarare la variabile esterna:

int v = 1; 
if((v = someMethod()) != 0) { 
    System.err.println(v); 
} 
+1

Come da [specifica] (http://docs.oracle.com/javase/specs/jls/se7/ html/jls-15.html # jls-15.26), l'assegnazione restituisce il valore del lato _left_-hand (la variabile che è stata assegnata a). – StenSoft

+0

@rmalchow Correction, non è necessario necessariamente inizializzare la variabile, dipende da cosa se l'istruzione restituisce, ad esempio, non è necessario inizializzarlo: – randomUser56789

+0

@StenSoft - true, tuttavia ... mi chiedo se, a parte un cast di implizione, come in long i = (int) 2; - questo avrebbe un significato? – rmalchow

1

Sì, è possibile assegnare all'interno se controllo condizionale. Ma la tua variabile dovrebbe essere già stata dichiarata per assegnare qualcosa.

22

È possibile assegnare, ma non dichiarare, all'interno di un if:

Prova questo:

int v; // separate declaration 
if((v = someMethod()) != 0) return true; 
2

Credo che il problema è dovuto al fatto che si sta definendo la variabile v all'interno del test. Come spiegato da @rmalchow, funzionerà modificarlo in

int v; 
if((v = someMethod()) != 0) return true; 

C'è anche un altro problema di portata variabile. Anche se ciò che hai provato dovesse funzionare, quale sarebbe il punto? Supponendo di poter definire l'ambito della variabile all'interno del test, la variabile v non esisterebbe al di fuori di tale ambito. Quindi, creare la variabile e assegnare il valore sarebbe inutile, poiché non sarebbe possibile utilizzarlo.

Le variabili esistono solo nell'ambito della creazione in cui sono state create. Dal momento che stai assegnando il valore per usarlo in seguito, considera l'ambito in cui stai creando la varible in modo che possa essere utilizzato dove necessario.

2

Sì, è possibile farlo. Considera il codice qui sotto:

public class Test 
{   
    public static void main (String[] args)  
    {  
     int v = 0;   
     if ((v=dostuff())!=0)    
     {   
      System.out.printf("HOWDY\n");   
     }    
    }     
    public static int dostuff()  
    {    
     //dosomething    
     return 1; 
    }  
}   

Spero che questo soddisfi la tua domanda.

Problemi correlati