Java и перечисление со сканером - PullRequest
0 голосов
/ 06 марта 2012

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

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

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

Ответы [ 3 ]

2 голосов
/ 06 марта 2012
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 голосов
/ 06 марта 2012

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

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

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

Type value = Type.values()[scanner.nextInt()];
0 голосов
/ 06 марта 2012

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...