Java和枚举与扫描仪

时间:2012-03-06 06:32:07

标签: java enums

我的枚举问题。我有一个班级Type,其中有两个枚举:RIGHTLEFT。 在其他类中,我有类Type的对象,名为value。 我有一个循环:

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

其中currentLvl.verify(value)是一种验证值是否正确的方法。我的问题是如何从用户那里获得value。我希望用户在循环if之前写下他的值,之后如果value是正确的,totalPoint++。我想使用扫描仪,但我不能value = scanner.nextInt();。我如何从用户那里获得value并将其价值输入变量value

3 个答案:

答案 0 :(得分:2)

听起来你需要使用valueOf()方法将String转换为枚举,如下所示:

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

或者,如果用户输入枚举值,则使用values()数组

Type value = Type.values()[scanner.nextInt()];

答案 1 :(得分:2)

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

OR:

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 :(得分:0)

我花了一分钟才弄清楚你在说什么,但我认为这就是你要找的东西:

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