2014-11-25 24 views
5

Ieri ho letto dell'operatore virgola in Java per for-loops. Che ha funzionato come mi aspettavo che loro. Ho pensato a questa costruzione ma non funziona come previsto.Do {} while (,) con operatore virgola, è anche possibile?

';' expected 
     } while((userInput < 1 || userInput > 3), wrongInput = true); 

';' expected 
     } while((userInput < 1 || userInput > 3), wrongInput = true); 

La mia idea era che, dopo un'iterazione, se il userInput non era compreso tra 1 e 3, si dovrebbe impostare booleano wrongInput a true in modo che durante la prossima iterazione verrà visualizzato un messaggio di errore. Indica che lo userInput non era valido.

private int askUserToSelectDifficulty() { 
    int userInput; 
    Boolean wrongInput = false; 

    do{ 
     if(wrongInput) println("\n\t Wrong input: possible selection 1, 2 or 3"); 
     userInput = readInt(); 
    } while((userInput < 1 || userInput > 3), wrongInput = true); 

    return userInput; 
} 

immagino che forse perché questo è all'interno della equivalente alla parte condizionale di un ciclo for, che si tratta di sintassi non valida. Perché non è possibile utilizzare un operatore virgola nella parte condizionale?

Esempi di dove ho visto l'operatore virgola utilizzati in for-loop: Giving multiple conditions in for loop in Java Java - comma operator outside for loop declaration

+1

un'occhiata ad operatori java - https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html – Joseph118

+1

e quegli esempi di coma vengono utilizzati per assegnare più valori, ma non condizioni – Joseph118

+0

@ Joseph118 Buono a sapersi che il, non è affatto un operatore in Java come già sottolineato da NPE. In effetti non è nella documentazione. – Joop

risposta

1

Non v'è alcun operatore virgola in Java (non nel senso C/C++ in ogni caso). Ci sono alcuni contesti in cui puoi dichiarare e inizializzare più cose contemporaneamente usando una virgola, ma che non generalizza ad altri contesti, come quello nell'esempio.

Un modo per frase il ciclo è in questo modo:

while (true) { 
    userInput = readInt(); 
    if (userInput >= 1 && userInput <= 3) { 
     break; 
    } 
    println("\n\t Wrong input: possible selection 1, 2 or 3"); 
}; 
3

Potrebbe essere meglio di srotolare questo un po '.

userInput = readInt(); 
while (userInput < 1 || userInput > 3) { 
    System.out.println("\n\tWrong input: possible selection 1, 2 or 3"); 
    userInput = readInt(); 
} 

Ciò evita la necessità di una bandiera.