Вы можете получить перечисление из строки с Enum.valueOf()
. Позаботьтесь о том, чтобы в других ответах не упоминалось, что Enum.valueOf()
будет вызывать IllegalArgumentException
, если передана строка, которая не является действительным членом перечисления.
Обязательно правильно форматировать и отступа кода, это помогает нам читать и понимать, что происходит (и вы!):
// note the capitalization, and the singular 'Color'
private enum Color {RED, BLACK};
// At least with the code provided, you don't need colorGuess or colorVerify to be
// instance variables, they can be local to the method. Limiting the amount of
// time a variable lives for (its scope) is critical for quality, maintainable code
public Color getColorGuess() {
Scanner in = new Scanner(System.in); // this should be outside the while loop
while(in.hasNextLine()) {
// .toUpperCase() lets you type "red" or "RED" and still match
String line = in.nextLine().toUpperCase();
try {
// Enum.valueOf() throws an exception if the input is not valid
Color guess = Color.valueOf(line);
switch(guess) {
case RED:
return guess; // return, rather than break, to exit the method
case BLACK:
return guess;
// As long as your switch statement covers all cases in your enum, you
// don't need a default: case, you'll never reach it
}
} catch (IllegalArgumentException e) {
System.out.println("Invalid color selection!");
}
}
}
Обратите внимание, что мы теперь вернуться guess
в обоих случаях, что несколько излишний. По крайней мере, с приведенным вами примером кода вам вообще не нужно отслеживать colorVerify
, потому что метод будет продолжать цикл навсегда до ввода правильного цвета. Вы можете заменить весь оператор switch
в моем методе простым return guess;
, поскольку вы знаете, что это допустимое предположение, как только Color.valueOf()
возвращает значение.
Другими словами, вы можете очистить свой код до:
public static Color getColorGuess() {
try (Scanner in = new Scanner(System.in)) {
while(in.hasNextLine()) {
try {
return Color.valueOf(in.nextLine().toUpperCase());
} catch (IllegalArgumentException e) {
System.out.println("Invalid color selection!");
}
}
}
}
Обратите внимание, что метод static
теперь, и использует try-with-resources блок, чтобы закрыть Scanner
, как только вы сделали с ним.
false false false: 'while (colorVerify = false)' !!! – Tyco
Я думаю, он пытается сказать, что в последней строке должен быть символ ==, а он правильный – LionC
Или, еще лучше, 'while (! ColorVerify)' – dimo414