我刚刚阅读了与Java Scanner问题相关的七个主题,但没有一个包含我的问题的答案。
我正在尝试从控制台获取用户输入。我创建一个Scanner对象(输入),然后尝试将用户的命令存储在一个名为“command”的字符串中。然后我将“命令”传递回原来的runGame函数。似乎Scanner / command确实读取了写文本。 (如果我输入'd'然后打印命令的内容则打印'd'。)
但是当我返回字符串并将其存储在nextMove中时,它会中断。例如,如果未调用statement,我将输入'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;
}
}
}
这是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;
}
当你正在帮助时(我要去搜索但是如果我找不到它)什么是识别扫描仪对象中空白输入的最佳方法?
我是否需要担心控制台中的用户输入?
答案 0 :(得分:2)
使用==
,而不是使用.equals(String)
,因此您的支票将如下所示:
if(nextMove.equals("d"))
==
检查变量是内存中完全相同的引用,.equals()
检查这两个实例在逻辑上是否等效。
答案 1 :(得分:2)
正如其他人所说,在检查字符串之间是否相等时使用.equals。
此外,每当你在平等检查中有一个常数时,你应该把它放在第一位。 e.g。
"abc".equals(someString);
这只是一个布尔值。鉴于:
someString.equals("abc");
这可以是布尔值或抛出NullPointerException。
答案 2 :(得分:1)
你不应该使用==进行字符串比较,如果我没记错,请使用compare,compareTo或equals。
答案 3 :(得分:0)
您不应使用“==”方法来比较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