Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java问题-扫描器输入和If(X==Input)语句_Java_Validation_Java.util.scanner - Fatal编程技术网

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

Java问题-扫描器输入和If(X==Input)语句,java,validation,java.util.scanner,Java,Validation,Java.util.scanner,我刚刚通读了与Java扫描器问题相关的七个线程,但没有一个包含我问题的答案 我正在尝试从控制台获取用户输入。我创建一个Scanner对象(输入),然后尝试将用户的命令存储在一个名为“command”的字符串中。然后我将“command”传递回原始的runGame函数。看起来扫描器/命令确实读取了写入文本。(如果我输入“d”,然后打印命令的内容,它将打印“d”。) 但当我返回字符串并将其存储在nextMove中时,它会断开。例如,如果未调用语句,我将输入'd',然后输入(nextMove=='d'

我刚刚通读了与Java扫描器问题相关的七个线程,但没有一个包含我问题的答案

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

但当我返回字符串并将其存储在nextMove中时,它会断开。例如,如果未调用语句,我将输入'd',然后输入(nextMove=='d')。事实上,无论我输入什么,都只输入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;
          }
        }
}
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;
}
以下是takeInput/Scanner功能代码:

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;
          }
        }
}
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;
}
在您帮助时(我将搜索,但如果找不到),识别扫描仪对象中空白输入的最佳方法是什么?


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

如果我记得正确使用了compare、compareTo或equals,则不应使用==进行字符串比较。

如果我记得正确使用了compare,比较或等于。

而不是使用
=
,使用
.equals(字符串)
,因此您的支票如下所示:

if(nextMove.equals("d"))

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

而不是使用
=
,使用
.equals(String)
,因此您的检查如下:

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

您不应该使用“==”方法来比较两个字符串对象。您需要使用.equals()方法

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

    if(nextMove.equals("d"))
        System.out.print("WORRRRDDD d");
    else if(nextMove.equals("w"))
        System.out.print("WORRRRDDD w ");
为什么?引用自

“==”运算符比较两个对象 以查看它们是否引用 同样的例子。它检查 两个对象是否完全相同 不管是不是同一个物体。可能需要两个字符串 不同的对象,但可以具有 相同的值(具有完全相同的 其中的字符)。在这种情况下,, “==”将返回false

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

请同时查看以下链接:

您不应该使用“==”方法来比较两个字符串对象。您需要使用.equals()方法

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

    if(nextMove.equals("d"))
        System.out.print("WORRRRDDD d");
    else if(nextMove.equals("w"))
        System.out.print("WORRRRDDD w ");
为什么?引用自

“==”运算符比较两个对象 以查看它们是否引用 同样的例子。它检查 两个对象是否完全相同 不管是不是同一个物体。可能需要两个字符串 不同的对象,但可以具有 相同的值(具有完全相同的 其中的字符)。在这种情况下,, “==”将返回false

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

请同时查看以下链接:


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

此外,当你在等式检查中有一个常数时,你应该把它放在第一位。e、 g

"abc".equals(someString);
这将永远只是一个布尔值。鉴于:

someString.equals("abc");

这可以是布尔值,也可以抛出NullPointerException。

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

此外,当你在等式检查中有一个常数时,你应该把它放在第一位。e、 g

"abc".equals(someString);
这将永远只是一个布尔值。鉴于:

someString.equals("abc");

这可能是一个布尔值或抛出一个NullPointerException。

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