虽然不等于字符串

时间:2013-08-25 00:26:39

标签: 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("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”并说它虽然不等于任何“类”数组值,但是打印消息“选择一个有效的班级!”。它没有用,有什么想法吗?

8 个答案:

答案 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)

contStringclassesString[](字符串数组),所以它们永远不会相等。您想知道的是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")){

如果您正确缩进代码 ,那么错误会更容易看到。