它打印两次的原因是因为第一行是在循环之外打印问题,然后测试答案(没有被捕获,然后依赖于引用变量被初始化的内容)然后进入首先得到的 while 循环用户对最后一个问题的输入然后再次打印该问题。
System.out.print("Would you like to continue (Y/N)?"); //prints to screen
//no input captured before test
while (!Anwser.equals("Y")){ //tests the reference variable
Anwser = UserInput.next(); //captures user input after test
System.out.println("Would you like to continue (Y/N)?"); //asks question again
}
while 循环是一个预测试循环,这意味着它在运行内部代码之前测试条件。使用此代码,您正在测试对第一个问题的响应以回答第二个问题。因此,如果您想保留 while 循环,您真正需要做的就是将问题放在循环中一次,如下所示:
while (!Anwser.equalsIgnoreCase("Y"))
{
System.out.println("Would you like to continue (Y/N)?");
Anwser = UserInput.next();
}
此外,由于您只是在捕获一个字符,因此可能不是让一个 String 对象来保存一个字符文字,而是尝试一个 char 变量。这是解决方案:
char answer = ' ';
Scanner userInput = new Scanner(System.in);
while (answer != 'N') // check for N to end
{
System.out.println("Would you like to continue (Y/N)?");
answer = Character.toUpperCase(userInput.nextLine().charAt(0));
}