2012-03-06 58 views
0

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

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

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

+2

什么是有效的用户输入的例子吗? – 2012-03-06 06:40:16

+0

示例有效的用户输入是:0或1.我想0表示左侧,1表示右侧 – edi233 2012-03-06 06:46:01

+0

您对枚举没有任何问题。目前,您对用户输入有问题,而且不是很清楚。 – EJP 2012-03-06 09:09:26

回答

2

听起来像是你需要使用valueOf()方法将字符串转换为枚举,这样的事情:

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

或者,如果用户输入枚举值然后使用values()阵列

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

喜对象,在枚举值的序号位置的依赖性可能,尤其是在变化的要求,即中心插入之前LEFT会从0改为左侧位置为1 – 2012-03-06 11:22:27

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 
} 

OR:

if(userInput == EType.LEFT.getValue()){ 
    // do something 
} else { 
    // do something 
} 
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 
+0

嗨伊恩导致的问题,在枚举值的序号位置的依赖性可能会导致特别是在变更请求期间,即在LEFT之前插入CENTER会将LEFT的位置从0改为1. – 2012-03-06 07:08:40

+0

@ChinBoon我完全同意!我的决定是根据他对原文的评论使用序号。我意识到你做这件事的方式绝对安全,我只是试图在他的代码中写出任何有意义的东西。话虽如此,接受的答案也使用序号。 – 2012-03-06 07:16:15