我的枚举问题。我有一个班级Type
,其中有两个枚举:RIGHT
和LEFT
。
在其他类中,我有类Type
的对象,名为value
。
我有一个循环:
if (currentLvl.verify(value)) {
totalPoint++;
}
其中currentLvl.verify(value)
是一种验证值是否正确的方法。我的问题是如何从用户那里获得value
。我希望用户在循环if之前写下他的值,之后如果value
是正确的,totalPoint++
。我想使用扫描仪,但我不能value = scanner.nextInt();
。我如何从用户那里获得value
并将其价值输入变量value
?
答案 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