2014-11-25 50 views
5

Wczoraj czytałem o operatorze przecinka w Javie dla pętli for. Co działało tak, jak tego oczekiwałem. Myślałem o tej konstrukcji, ale nie działa zgodnie z oczekiwaniami.Czy {} podczas (,) z operatorem przecinka jest to możliwe?

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

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

Moim pomysłem było to, że po jednej iteracji, jeżeli userInput nie było między 1 i 3, należy ustawić wartość logiczna wrongInput do true tak, że podczas następnej iteracji zostanie wyświetlony komunikat o błędzie. Wskazuje, że userInput jest nieprawidłowy.

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; 
} 

sobie wyobrazić, że być może dlatego, że jest w środku odpowiednik warunkowego części do pętli, która jest nieważny składni. Ponieważ nie możesz korzystać z operatora przecinka w części warunkowej?

Przykłady gdzie Widziałem operatora przecinek wykorzystywane w for-pętle: Giving multiple conditions in for loop in Java Java - comma operator outside for loop declaration

+1

przyjrzeć operatorów java - https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html – Joseph118

+1

i te przykłady śpiączki są wykorzystywane przypisać wiele wartości, ale nie warunki – Joseph118

+0

@ Joseph118 Dobrze wiedzieć, że w ogóle nie jest operatorem w Javie, jak już wskazano w NPE. W rzeczywistości nie ma go w dokumentacji. – Joop

Odpowiedz

1

Nie ma operatora przecinek w Javie (nie w sensie C/C++ w każdym razie). Istnieje kilka kontekstów, w których można zadeklarować i zainicjować wiele rzeczy jednocześnie za pomocą przecinka, ale to nie jest generalizowane w innych kontekstach, takich jak ten w przykładzie.

Jednym ze sposobów wyrażenia pętla jest tak:

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

To może być najlepiej rozwinąć to trochę.

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

Pozwala to uniknąć konieczności użycia flagi.