-3

这是我的代码的一小部分。

System.out.print("Would you like to continue (Y/N)?");
while (!Anwser.equals("Y")){
    Anwser = UserInput.next();
    System.out.println("Would you like to continue (Y/N)?");
}

这就是答案。

> Would you like to continue (Y/N)? 
> Would you like to continue (Y/N)?

为什么我输入了 Y 却不满足条件,它又打印出来了?在此之后,它继续代码:

4

3 回答 3

6

循环执行while零次或多次。

循环执行一次do while或多次。

对于延续问题,您并不真正关心用户输入的内容,只要它是“Y”或“y”即可。其他任何事情都会终止程序。还有一个延续问题,程序通常想要运行一次。因此,将您的代码包装在一个do while循环中。

do {
// Your code goes here

    System.out.print("Would you like to continue (Y/N)?");
    Anwser = UserInput.next();
} while (answer.equalsIgnoreCase( "Y"));

至于为什么你的代码不起作用。也许您应该在循环开始之前为 Answer 分配一个值。

于 2013-04-05T21:29:21.507 回答
2

尝试更改“Anwser”变量的值并将其替换为用户的输入

像这样:

System.out.print("Would you like to continue (Y/N)?");
Anwser = UserInput.next();
while (!Anwser.equals("Y")){
    System.out.println("Would you like to continue (Y/N)?");
    Anwser = UserInput.next();
}
于 2013-04-05T21:38:23.993 回答
1

它打印两次的原因是因为第一行是在循环之外打印问题,然后测试答案(没有被捕获,然后依赖于引用变量被初始化的内容)然后进入首先得到的 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));
}
于 2013-04-06T00:24:20.160 回答