Java 而不等于字符串
我正在制作一个基于文本的RPG游戏,我正在创建一个chooseClass方法。参见代码:Java 而不等于字符串,java,Java,我正在制作一个基于文本的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("Choo
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”,并说虽然它不等于任何“classes”数组值,但可以打印消息“选择一个有效的类!”。它不起作用,有什么想法吗?为此,您应该使用枚举。它将有一个方法返回输入字符串的枚举,然后您可以找到该值。这将检查cont值是否在数组中:
while (!classes.asList("rogue", "wizard", "knight", "archer").contains(cont))
您尝试将字符串cont与数组类进行比较。cont.equals(classes)
不测试cont
是否在类中。它测试cont
是否等于classes
。因为cont
是一个字符串,而classes
是一个字符串数组,所以这永远不会是真的
我建议使用Arrays.asList
创建类列表。然后,您可以测试列表是否包含cont
:
classes = Arrays.asList("rogue", "wizard", "knight", "archer");
... while (!classes.contains(cont));
while块中的语句不正确。您不应该将con与class数组进行比较您不能将单个字符串与字符串数组进行比较。正确理解这种逻辑的方法是,“有效类集是否包含用户键入的内容?”。下面是一个小片段:
Set<String> classes = new HashSet<String>(Arrays.asList("Rogue", "Wizard")); // ...etc.
while (!classes.contains(cont));
Set classes=newhashset(Arrays.asList(“Rogue”、“Wizard”);/。。。等
而(!classes.contains(cont));
cont
是一个字符串
,类
是一个字符串[]
(字符串数组),因此它们永远不会相等。您想知道的是类是否包含cont
。我建议将类更改为列表
,这样您就可以使用包含
方法
final List<String> CLASSES = Arrays.asList("rogue", "wizard", "knight", "archer");
也就是说,您的变量名和一般设计可能需要一些工作。对于初学者来说,cont
可能应该被命名为更具描述性的名称,如userClassChoice
,我不知道您是否确实需要该数组,但假设您需要:
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()))
String[]类={“盗贼”、“巫师”、“骑士”、“弓箭手”};
列表=数组.asList(类);
扫描仪输入=新扫描仪(System.in);
做(
println(“选择你的职业(盗贼、巫师、骑士、弓箭手):”;
cont=input.next();
}而(!list.contains(cont.toLowerCase()))
您可以对其进行优化,但这是一些可以工作的基础。除此之外,您还有一个语法错误:
if (cont.equalsIgnoreCase("rogue")){
System.out.println("You have chosen the Rogue!");
} // <<< -- syntax error
}else if(cont.equalsIgnoreCase("wizard")){
if(cont.equalsIgnoreCase(“rogue”)){
System.out.println(“你选择了盗贼!”);
}//此外,foreach循环可以很好地清理大量if-elseif。@Vulcan:的确如此。定义类,然后只在do-while测试中使用它,这是相当愚蠢的。执行了while语句,得到了错误“Syntax error,insert”while(Expression);“to complete DoStatement”@阿当巴沙姆:你可能把大括号搞砸了。do cont=input.next();而(!classes.contains(cont));System.out.println(“你选择了”+cont);我认为这是最好的答案。这将简化代码,并便于传递值。同意。任何时候在编译时有已知的常量列表,都应该自动考虑将它们表示为enum
。您甚至可以扩展Java enum,以便每个enum对象都可以包含每个cha的所有元数据Racker类,以及对其进行操作的方法。在这种情况下,枚举确实是一种方法。
if (cont.equalsIgnoreCase("rogue")){
System.out.println("You have chosen the Rogue!");
} // <<< -- syntax error
}else if(cont.equalsIgnoreCase("wizard")){