提问人:fox 提问时间:11/20/2021 更新时间:11/21/2021 访问量:78
如何将输入的多种变体用于表示同一事物?
Ways to take multiple variations of inputs to mean the same thing?
问:
我必须用 Java 为 uni 制作一个基于文本的游戏,我想让用户对项目/NPC 使用多个命令变体和多个名称。 最好的方法是什么?
例如,如果我希望人们去西部,我希望人们能够说 “向西走”或“向西走”或“向西走”等。
我知道我可以用其中的许多来做到这一点:
if (command.equals("head") || command.equals("walk") || command.equals("travel") || command.equals("go"))
但是,这不仅冗长而丑陋,而且随着每一个命令、每一个项目和每一个字符的出现,它都会变得非常长且效率低下。有没有更好的方法可以做到这一点,而不是疯狂的先进?谢谢
答:
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 + "!"
}
评论