[英]Assigning an enum based on the user input
我正在嘗試構建一個簡單的控制台井字游戲。 我試圖讓用戶使用 select Circle 或 Cross 來玩。 我有一個 Circle 和 Cross 的枚舉。
每次我運行程序時,我都會得到 else output,即使我輸入了“Circle”或“Cross”。
不尋找代碼答案,只是想看看是否有人可以指出我的錯誤方向。
import java.util.Scanner;
public class Game {
private Model model;
private Model player;
public Game() {
Scanner input = new Scanner(System.in);
System.out.println("Do you want to play as Cross or Circle");
input.nextLine();
if(input.equals(Model.valueOf("CROSS"))) {
player = Model.CROSS;
} else if(input.equals(Model.valueOf("CIRCLE"))) {
player = Model.CIRCLE;
} else {
System.out.println("Invalid choice, please choose either Circle or Cross");
}
}
}
public enum Model {
CROSS, CIRCLE
}
input
是一個Scanner
並且永遠不會等於一個枚舉實例。 您需要存儲input.nextLine()
的結果並進行比較。
String line = input.nextLine();
if (line.equals("CROSS")) {
...
} else if (line.equals("CIRCLE")) {
...
} else {
...
}
來自JDK 11 doc class Enum 的方法valueOf
返回具有指定名稱的指定枚舉類型的枚舉常量。 該名稱必須與用於在此類型中聲明枚舉常量的標識符完全匹配。 (不允許使用多余的空白字符。)請注意,對於特定的枚舉類型 T,可以使用該枚舉上隱式聲明的公共 static T valueOf(String) 方法代替此方法,從名稱到相應的枚舉常量。 枚舉類型的所有常量都可以通過調用該類型的隱式公共 static T[] values() 方法獲得。
也許你想這樣寫你的 if
String line = input.nextLine();
if(Model.CROSS == Model.valueOf(line.trim())) {
player = Model.CROSS;
} else if(Model.CIRCLE == Model.valueOf(line.trim())) {
player = Model.CIRCLE;
} else {
System.out.println("Invalid choice, please choose either Circle or Cross");
}
另一個好處是String line = input.nextLine();
如何在這里建議其他答案
您正在嘗試檢查掃描儀 object 是否等於枚舉的字符串值,而是將 nextLine() 返回值保存到字符串變量並檢查變量是否相等並且最好使用 equalsIgnoreCase
public Game() {
Scanner scanner = new Scanner(System.in);
System.out.println("Do you want to play as Cross or Circle");
String input = scanner.nextLine();
if(input.equalsIgnoreCase(Model.CIRCLE.name())) {
player = Model.CROSS;
} else if(input.equalsIgnoreCase(Model.CROSS.name())) {
player = Model.CIRCLE;
} else {
System.out.println("Invalid choice, please choose either Circle or Cross");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.