如何将输入的多种变体用于表示同一事物?

Ways to take multiple variations of inputs to mean the same thing?

提问人:fox 提问时间:11/20/2021 更新时间:11/21/2021 访问量:78

问:

我必须用 Java 为 uni 制作一个基于文本的游戏,我想让用户对项目/NPC 使用多个命令变体和多个名称。 最好的方法是什么?

例如,如果我希望人们去西部,我希望人们能够说 “向西走”或“向西走”或“向西走”等。

我知道我可以用其中的许多来做到这一点:

if (command.equals("head") || command.equals("walk") || command.equals("travel") || command.equals("go"))

但是,这不仅冗长而丑陋,而且随着每一个命令、每一个项目和每一个字符的出现,它都会变得非常长且效率低下。有没有更好的方法可以做到这一点,而不是疯狂的先进?谢谢

解析 输入 文本 java.util.scanner

评论

0赞 11/20/2021
您可以将字符串放入数组列表并迭代以检查输入。
0赞 11/20/2021
或者,您可以忽略他们键入的内容,但“west”、“north”和“south”等值除外。

答:

1赞 user17353495 11/20/2021 #1

如果你愿意,你可以忽略用户输入的内容,除了你想要的实际值,我假设这是方向:

String lowerCaseCommand = command.toLowerCase()
if (lowerCaseCommand.contains("west") || lowerCaseCommand.contains("north") || so on...) {
   // do something.
}

或者你想要这样的东西:

String[] array = {"head", "walk", "travel"}
for (String str : array) {
   if (command.equalsIgnoreCase(str)) {
       // do something
       break;
   }
}

评论

0赞 fox 11/20/2021
谢谢,我想这看起来更好一点。只是我想避免有这么多。像 id 一样,每个命令、每个项目、每个字符都必须有一个,其中大多数只有一个备用变体。所以即使我使用它,我也只有数百行 if 语句。也许我可以尝试将所有内容都放在 HashMap 中,并将变体作为键,将 main 命令作为值来替换它。
1赞 DevilsHnd - 退した 11/21/2021 #2

您可以(如果需要)使用开关/外壳块,例如:

switch (command.toLowerCase()) {
    case "head": case "walk": case "travel":
        callDoSomethingMethod();
        break;
    case "rest": case "sleep": case "passout":
        callAnotherDoSomethingMethod();
        break;
    default:
        System.err.println("Don't understand the command: '" + command + "!"
}