У меня проблема с перечислением. У меня есть класс Type, в котором есть два перечисления: RIGHT и LEFT. В другом классе у меня есть объект класса Type с именем value. У меня петля:

if (currentLvl.verify(value)) {
    totalPoint++;
}

Где currentLvl.verify(value) - метод, проверяющий правильность значения. Моя проблема в том, как получить value от пользователя. Я хочу, чтобы пользователь перед циклом if записал свое значение, а после этого, если value верен, totalPoint++. Я хочу использовать сканер, но не могу value = scanner.nextInt();. Как я могу получить value от пользователя и его значение, присвоенное переменной value?

1
edi233 6 Мар 2012 в 10:32

3 ответа

Лучший ответ

Похоже, вам нужно использовать метод valueOf() для преобразования String в перечисление, примерно так:

Type value = Type.valueOf(scanner.next().toUpperCase());

Или, если пользователь вводит значение перечисления, используйте массив values()

Type value = Type.values()[scanner.nextInt()];
2
jjjt78 6 Мар 2012 в 10:49
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

System.out.print("Enter a value: ");

String userInput = stdin.readLine();

System.out.println(userInput);

В классе перечисления:

public enum EType{
  private String value;

  LEFT("left"), RIGHT("right");

  private EType(String value){
    this.value = value;
  }

  public String getValue(){
    return this.value;
  }
}

ИЛИ ЖЕ:

public enum EType{
  private int value;

  LEFT(1), RIGHT(0);

  private EType(int value){
    this.value = value;
  }

  public int getValue(){
    return this.value;
  }
}

Сравнение значения перечисления и значения пользователя:

if(LEFT.getValue().equalsIgnoreCase(userInput)){
  // do something
} else {
  // do something
}

ИЛИ ЖЕ:

if(userInput == EType.LEFT.getValue()){
  // do something
} else {
  // do something
}
2
Oh Chin Boon 6 Мар 2012 в 07:00

Мне потребовалась минута, чтобы понять, о чем вы говорите, но я думаю, что это то, что вы ищете:

public enum Type {
    LEFT, RIGHT;

    public static Type getTypeByOrdinal(int ordinal) {
        for(Type t : Type.values()) {
            if(t.ordinal() == ordinal) {
                return t;
            }
        }

        return null;
    }

}

Теперь вы можете сканировать целыми числами:

Scanner sc = new Scanner(System.in);

int userInput = sc.nextInt(); // Assume userInput = 1
Type t1 = Type.getTypeByOrdinal(userInput);
System.out.println(t1); // => RIGHT

userInput = sc.nextInt(); // Assume userInput = 0
Type t2= Type.getTypeByOrdinal(userInput);
System.out.println(t2); // => LEFT
0
Ian Bishop 6 Мар 2012 в 07:01