我正在制作基于文本的RPG游戏,我正在创建一个chooseClass方法。见代码:
public static void classChoice(){
String cont =null;
String[] classes = {"rogue", "wizard", "knight", "archer"};
Scanner input = new Scanner(System.in);
do{
System.out.println("Choose your class (Rogue, Wizard, Knight, Archer): ");
cont = input.next();
if (cont.equalsIgnoreCase("rogue")){
System.out.println("You have chosen the Rogue!");
} else if (cont.equalsIgnoreCase("wizard")) {
System.out.println("You have chosen the Wizard!");
} else if (cont.equalsIgnoreCase("knight")) {
System.out.println("You have chosen the Knight!");
} else if (cont.equalsIgnoreCase("archer")) {
System.out.println("You have chosen the Archer!");
} else {
System.out.println("Choose a valid class!");
}
} while(!cont.equals(classes));
}
所以我为所有类创建了一个字符串数组,我认为我可以让用户输入“cont”并说它虽然不等于任何“类”数组值,但是打印消息“选择一个有效的班级!”。它没有用,有什么想法吗?
答案 0 :(得分:9)
cont.equals(classes)
不会测试cont
是否在classes
中。它测试cont
是否等于classes
。由于cont
是一个字符串而classes
是一个字符串数组,因此永远不会成立。
我建议使用Arrays.asList
制作课程列表。然后,您可以测试列表是否包含cont
:
classes = Arrays.asList("rogue", "wizard", "knight", "archer");
... while (!classes.contains(cont));
答案 1 :(得分:4)
您应该为此目的使用枚举。它会有一个方法来返回输入字符串的枚举,然后你就可以找出它的值。
答案 2 :(得分:2)
您无法将单个字符串与字符串数组进行比较。想到这个逻辑的正确方法是,“有效类的集合是否包含用户键入的内容?”。可能的外观如下:
Set<String> classes = new HashSet<String>(Arrays.asList("Rogue", "Wizard")); // ...etc.
while (!classes.contains(cont));
答案 3 :(得分:2)
cont
是String
,classes
是String[]
(字符串数组),所以它们永远不会相等。您想知道的是classes
是否包含cont
。我建议将班级更改为List<String>
,以便您可以使用contains
方法。
final List<String> CLASSES = Arrays.asList("rogue", "wizard", "knight", "archer");
然后
while(!CLASSES.contains(cont));
那就是说,你的变量名和一般设计可以使用一些工作。对于初学者,cont
应该被命名为更具描述性的内容,例如userClassChoice
。
答案 4 :(得分:2)
我不知道你是否真的需要数组,但我们假设你这样做:
String[] classes = {"rogue", "wizard", "knight", "archer"};
List<String> list = Arrays.asList(classes);
Scanner input = new Scanner(System.in);
do (
System.out.println("Choose your class (Rogue, Wizard, Knight, Archer): ");
cont = input.next();
} while (!list.contains(cont.toLowerCase()))
您可以对其进行优化,但这是可行的基础知识。
答案 5 :(得分:1)
这将检查你的数组中是否有续约值:
while (!classes.asList("rogue", "wizard", "knight", "archer").contains(cont))
您尝试将字符串cont与数组类进行比较。
答案 6 :(得分:1)
while块中的语句不正确。您不应该将con与类数组进行比较
答案 7 :(得分:1)
除此之外,还有语法错误:
if (cont.equalsIgnoreCase("rogue")){
System.out.println("You have chosen the Rogue!");
} // <<< -- syntax error
}else if(cont.equalsIgnoreCase("wizard")){
如果您正确缩进代码 ,那么错误会更容易看到。