8

对于我的第一个 Java 项目,我正在尝试制作一个简单的基于文本的游戏。似乎 or 管道不起作用,当我尝试在它不起作用后输入一些东西时;我必须重新启动它。

    public void GameStart() {
    String playerName = "Player";
    String Command = "Choice";
        System.out.println("Type Start to start game!");
    if(in.nextLine().equals("Start") || in.nextLine().equals("start")) {
        Help();
        print("Type Begin to start game :D");
        if(in.nextLine().equals("Begin") || in.nextLine().equals("begin")) {
            System.out.println("Who are you?");

开始和开始工作,但像我使用的第一个字母小写 || 因为没有。当我使用它们时,我必须重新启动它,因为我无法输入任何内容,但我显然有或管道说要使用其中任何一个。有谁知道是什么原因造成的?

4

3 回答 3

16
in.nextLine().equals("Start") || in.nextLine().equals("start")

这将从左到右执行,因此首先in.nextLine().equals("Start")执行。

假设您输入"start". 左侧返回false。继续评估整个表达式。右侧执行,in.nextLine().equals("start"). 因此,它读取另一行,等待您的另一个输入。这不是你想要的。

要解决这个问题(这也是一般规则):不要更改条件中的if状态。换句话说:条件中的表达式应该没有副作用

您可以将更改状态的方法的结果分配给in.nextLine()引用:

String line = in.nextLine();
if (line.equals("Start") || line.equals("start"))

你也可以这样写条件:

if (line.equalsIgnoreCase("start"))

或者

if (line.toLowerCase().equals("start"))

现在,任何 case 组合都可以,甚至"START".

最后但同样重要的是:这些||不称为管道。如果在编程上下文中使用“管道”一词,很多人会想到Unix 管道|命令行中的符号。

在 Java||中是“逻辑或运算符”、“逻辑或”。用“二进制或”来区分|,这是非常不同的。

于 2015-08-05T20:10:06.790 回答
6
String str = in.nextLine();
str.equalsIgnoreCase("Start");

它将检查小写和大写。您不需要调用 equals() 方法两次,因此它将优化您的代码和可读性。

我希望这能解决你的问题。

于 2015-08-05T20:19:05.370 回答
3

将扫描仪输入存储在 String 中,如下所示:

 userInput = in.nextLine();

然后在你的条件语句中评估

于 2015-08-05T20:09:36.637 回答