2012-03-06 62 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