2

我正在制作一个基于文本的 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”并说虽然它不等于任何“类”数组值,然后打印消息“选择一个有效的课程!”。它不起作用,有什么想法吗?

4

8 回答 8

10

cont.equals(classes)不测试是否contclasses. 它测试是否cont等于classes。因为cont是一个字符串并且classes是一个字符串数组,所以这永远不会是真的。

我建议使用Arrays.asList来制作类列表。然后,您可以测试列表是否包含cont

classes = Arrays.asList("rogue", "wizard", "knight", "archer");

... while (!classes.contains(cont));
于 2013-08-25T00:30:55.583 回答
4

为此,您应该使用枚举。它有一个方法可以为输入字符串返回一个枚举,然后你可以找出这个值是什么。

于 2013-08-25T00:28:32.010 回答
2

您不能将单个字符串与字符串数组进行比较。思考这个逻辑的正确方法是,“有效类的集合是否包含用户输入的任何内容?”。可能看起来像这样的一小部分如下:

Set<String> classes = new HashSet<String>(Arrays.asList("Rogue", "Wizard")); // ...etc.
while (!classes.contains(cont));
于 2013-08-25T00:32:54.337 回答
2

cont是一个String并且classes是一个String[](字符串数组),所以它们永远不会相等。你想知道的是 if classescontains cont。我建议将类更改为 aList<String>以便您可以使用该contains方法。

final List<String> CLASSES = Arrays.asList("rogue", "wizard", "knight", "archer");

接着

while(!CLASSES.contains(cont));

也就是说,您的变量名称和一般设计可能需要一些工作。对于初学者cont,可能应该将其命名为更具描述性的名称,例如userClassChoice.

于 2013-08-25T00:35:33.027 回答
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()))

您可以对其进行改进,但这是可行的基础知识。

于 2013-08-25T00:36:56.220 回答
1

这将检查 cont 值是否在您的数组中:

 while (!classes.asList("rogue", "wizard", "knight", "archer").contains(cont))

您尝试将字符串 cont 与数组类进行比较。

于 2013-08-25T00:30:54.070 回答
1

while 块中的语句不正确。您不应该将 con 与 classes 数组进行比较

于 2013-08-25T00:31:41.187 回答
1

除其他外,您还有一个语法错误:

if (cont.equalsIgnoreCase("rogue")){
    System.out.println("You have chosen the Rogue!");
}   // <<< -- syntax error
}else if(cont.equalsIgnoreCase("wizard")){

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

于 2013-08-25T00:54:20.253 回答