【问题标题】:Java Problems - Scanner Input and If (X == Input) StatementsJava 问题 - 扫描程序输入和 If (X == Input) 语句
【发布时间】:2010-09-11 04:29:24
【问题描述】:

我刚刚阅读了与 Java Scanner 问题相关的七个线程,但没有一个包含我的问题的答案。

我正在尝试从控制台获取用户输入。我创建了一个 Scanner 对象(输入),然后尝试将用户的命令存储在一个名为“command”的字符串中。然后我将“命令”传递回原来的 runGame 函数。似乎扫描仪/命令确实读取了写入文本。 (如果我输入 'd' 然后打印命令的内容,它会打印 'd'。)

但是当我返回字符串并将其存储在 nextMove 中时,它会中断。例如,我将输入 'd' 但随后 (nextMove == 'd') if 语句未被调用。其实不管我输入什么,都只输入了else语句。

我做错了什么?我该如何解决它

这里是原始函数代码:

public void runGame() {
        drawWindow();
        while(true) {
            String nextMove = takeInput();
            if(nextMove == "d")
                System.out.print("WORRRRDDD d");
            else if(nextMove == "w")
                System.out.print("WORRRRDDD w ");
            else {
                drawWindow();
                System.out.print("YOU GOT ELSED");
                continue;
          }
        }
}

这里是 takeInput/Scanner 函数代码:

public String takeInput() {
    String command;
    input = new Scanner(System.in);     // "input" is the Scanner object used for all input.
    try{
        System.out.print("Enter command (d, w, stop, restart, exit):  ");
        command = input.next();
    } catch(Exception e) {
        System.out.println("You entered an invalid command.");
        return null;
    } 
    System.out.println("\n RETURNING COMMAND" + command + " \n");
    return command;
}

在您提供帮助时(我会搜索,但如果找不到)识别扫描仪对象中的空白输入的最佳方法是什么?

对于控制台中的用户输入,我是否还需要担心其他任何异常/捕获?

【问题讨论】:

  • 我可能错了,但我不认为 java 字符串语句是用 ==
  • 等一下,因为我需要使用 .equals() 不是吗?

标签: java validation java.util.scanner


【解决方案1】:

不要使用==,而是使用.equals(String),这样您的支票将如下所示:

if(nextMove.equals("d"))

== 检查变量是否是内存中完全相同的引用,.equals() 检查两个实例在逻辑上是否等效。

【讨论】:

    【解决方案2】:

    正如其他人所说,在检查字符串之间是否相等时使用 .equals。

    此外,只要您在相等性检查中有一个常数,您就应该把它放在第一位。例如

    "abc".equals(someString);
    

    这只会是一个布尔值。鉴于:

    someString.equals("abc");
    

    这可以是布尔值或抛出 NullPointerException。

    【讨论】:

      【解决方案3】:

      如果我没记错的话,你不应该使用 == 进行字符串比较。

      【讨论】:

        【解决方案4】:

        您不应该使用“==”方法来比较 2 个 String 对象。您将需要使用 .equals() 方法。

        您更改的部分代码应如下所示:

            if(nextMove.equals("d"))
                System.out.print("WORRRRDDD d");
            else if(nextMove.equals("w"))
                System.out.print("WORRRRDDD w ");
        

        为什么?引用自here

        “==”运算符比较两个对象 参考,看看他们是否参考 到同一个实例。它检查 两个对象是否恰好是 相同的对象与否。两个字符串可能是 不同的对象,但可以有 相同的值(具有完全相同的 其中的字符)。在这种情况下, “==” 将返回 false。

        比较时要特别小心 对象。如果你想看看是否 两个对象是否相同,那么 使用”==” 来,或者使用equal() 来查看是否 它们具有相同的价值。

        同时检查以下链接:

        http://www.zparacha.com/java-string-comparison/

        http://www.devdaily.com/java/edu/qanda/pjqa00001.shtml

        http://www.javabeginner.com/learn-java/java-string-comparison

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-31
          • 2012-05-20
          • 2017-07-10
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多