Java 而不等于字符串

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

我正在制作一个基于文本的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”,并说虽然它不等于任何“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")){