提问人:Edmunds Beks 提问时间:3/27/2022 最后编辑:roksuiEdmunds Beks 更新时间:3/27/2022 访问量:67
Java 为什么扫描程序无法识别用户输入 [duplicate]
Java Why Scanner doesn't recognise user input [duplicate]
问:
我编写了一个函数来接收用户输入。无法得到正确的答案。总是失败。我现在失去了理智。
public String getChoice() {
Scanner SC = new Scanner(System.in);
System.out.print("Ready to play? (Y/N) ");
String playChoice = SC.next(); // Input Y or N
playChoice = playChoice.replace("\n", "");
System.out.println("Input length is: " + playChoice.length());
System.out.println(playChoice);
if (playChoice == "N") {
SC.close();
return "Success N";
}
else if (playChoice == "Y") {
SC.close();
return "Success Y";
}
SC.close();
return "Failure"; // Always this one works
}
答:
2赞
Bialomazur
3/27/2022
#1
试试这个:
public String getChoice() {
Scanner SC = new Scanner(System.in);
System.out.print("Ready to play? (Y/N) ");
String playChoice = SC.next(); // Input Y or N
playChoice = playChoice.replace("\n", "");
if (playChoice.equals("N")) { // Replace operator '==' with 'equals()' method.
SC.close();
return "Success N";
} else if (playChoice.equals("Y")) { // Same here.
SC.close();
return "Success Y";
}
SC.close();
return "Failure"; // Always this one works
}
代码未按预期工作的原因是运算符比较了 2 个比较对象引用是否指向同一对象。在您的 if 语句中显然不是这种情况,因此这些表达式的计算结果始终为 。==
false
另一方面,该方法实际上比较了给定对象的内容,从而提供了所需的结果。equals()
0赞
eternal
3/27/2022
#2
@Bialomazur已经给出了一个解释,这里有一些更简洁的代码和提示。
实际上,关闭扫描仪不是一个好的做法,但如果您决定这样做,您可以在一个地方关闭它,因为您不再使用扫描仪了。 另外,这里的开关看起来更好
public String getChoice() {
Scanner SC = new Scanner(System.in);
System.out.print("Ready to play? (Y/N) ");
String playChoice = SC.next(); // Input Y or N
playChoice = playChoice.replace("\n", "");
System.out.println("Input length is: " + playChoice.length());
System.out.println(playChoice);
SC.close();
switch (playChoice) {
case "Y":
return "Success Y";
case "N":
return "Success N";
default:
return "Failure";
}
}
评论