0

我刚刚阅读了与 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;
}

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

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

4

4 回答 4

2

而不是 using ==, use .equals(String),所以您的检查看起来像:

if(nextMove.equals("d"))

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

于 2010-09-11T04:58:38.777 回答
2

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

此外,每当您在相等性检查中有一个常数时,您都应该把它放在第一位。例如

"abc".equals(someString);

这永远只是一个布尔值。然而:

someString.equals("abc");

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

于 2010-09-11T11:07:48.483 回答
1

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

于 2010-09-11T04:40:18.603 回答
0

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

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

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

为什么 ?这里引用

“==”运算符比较两个对象引用以查看它们是否引用同一个实例。它检查两个对象是否完全相同。两个字符串可能是不同的对象,但可以具有相同的值(其中包含完全相同的字符)。在这种情况下,“==”将返回 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

于 2010-09-11T11:02:27.123 回答