Java 问题 - 扫描程序输入和 If (X == Input) 语句

Posted

技术标签:

【中文标题】Java 问题 - 扫描程序输入和 If (X == Input) 语句【英文标题】:Java Problems - Scanner Input and If (X == Input) Statements 【发布时间】: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() 不是吗? 【参考方案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

【讨论】:

以上是关于Java 问题 - 扫描程序输入和 If (X == Input) 语句的主要内容,如果未能解决你的问题,请参考以下文章

Java 扫描仪字符串输入

java Java用户输入扫描程序类

输入三个整数x,y,z,请把这三个数由小到大输出:用JAVA语言编程

Java使用扫描仪输入键按下

Java webapp中的病毒扫描?

0003输出语句分支结构 if else 随机数