将.equals()与Scanner对象一起使用

时间:2013-02-16 19:56:17

标签: java

由于某种原因,我得到的结果是小写“y”的输入与大写“Y”的输入不同。输入“y”执行if语句中的代码,但输入“Y”不执行。此外,输入“Y”不执行中断;在其他之后。为什么这样,我做错了什么?

Scanner playAgain = new Scanner (System.in);


System.out.println ("Play Again (Y/N)");

if ((playAgain.next().equals("y"))||(playAgain.next().equals("Y")))
{
Game theGame1 = new Game(0);
currentPts = currentPts + theGame1.play(total);

System.out.println("Current total is:" + "   "  +  currentPts);
}
else break;

2 个答案:

答案 0 :(得分:8)

在这种情况下:

if ((playAgain.next().equals("y"))||(playAgain.next().equals("Y")))

您正在调用playAgain.next() 两次 - 因此它会从用户那里获取两个不同的字符串。

我确定你只想获取一个字符串:

String answer = playAgain.next();
if (answer.equals("y") || answer.equals("Y"))

或者,只需使用equalsIgnoreCase,这意味着您只需阅读一次:

if (playAgain.next().equalsIgnoreCase("y"))

答案 1 :(得分:7)

你在if语句中读了两遍。因此,如果您输入playAgain.next(),则您的第二个"Y"无法阅读"Y"

您可以将读取输入存储在变量中,然后使用它:

String input = playAgain.next();   
if ((input.equals("y"))||(input.equals("Y")))

除此之外,您还可以使用更好的equalsIgnoreCase方法:

if (playAgain.next().equalsIgnoreCase("y"))