@朱利安。这就像晚了 5 年,但我修复了你的代码。
import java.util.Scanner;
public class Methods2 {
static Scanner userInput = new Scanner(System.in);
static String answer;
static int yes1no2;
static int loopStage = 1;
public static void main(String[] args)
{
System.out.println("Welcome to the bank.\nWould you like to open an account?");
answer = userInput.nextLine();
while (loopStage == 1)
{
if (yesOrNo() == 1)
{
loopStage = 2;
System.out.println("Great.");
}
else if (yesOrNo() == 2)
{
loopStage = 2;
System.out.println("Ok, please come again.");
}
}
}
public static int yesOrNo()
{
if (answer.equalsIgnoreCase("yes")) {
yes1no2 = 1;
System.out.println(yes1no2);
}
else if (answer.equalsIgnoreCase("no")) {
System.out.println(yes1no2);
yes1no2 = 2;
} else {
yes1no2 = 3;
System.out.println("Please say 'Yes' or 'No'.");
answer = userInput.nextLine();
}
return yes1no2;
}
}
所以.. answer = userInput.nextLine(); 再次成为真正的交易。看看我怎么说: System.out.println(yes1no2); 在您向系统询问 yes1no2 的部分中?这样做将显示通过扫描仪时您的输入实际发生的情况。
你会发现,如果你在你的代码上这样做,它会显示:是的打印.. 1
没有打印.. 0 (然后它会要求你再次拒绝的新值)没有打印.. 2
把:answer = userInput.nextLine(); 上述方式将使输入值在再次检查之前不会离开缓冲区。那么这里发生了什么?- 程序询问用户一个值 - 检查 if 语句是否为真?处理语句内的代码:移到下一行并且..(这是吸引人的部分)它将把值放在扫描仪缓冲区中,因为它用于检查是否是 == 真(扫描仪值回落到 0)[ps don '不要尝试将 No 值更改为 0,因为 Scanner 值!= 0,Scanner 值 == 根本不存在] 然后由于 Scanner = 0 和 0 不是括号内的值,它会再次询问您。你再次输入 No 然后它将注册 No = 2 我还必须修复 else 语句(yes1no2),因为它无休止地循环:基本上只是要求将新输入放入缓冲区中就可以了。
将扫描仪缓冲区放在括号外,它将检查整个括号以查看是否有任何东西连接到它,然后再删除该值。自己试试
我很抱歉格式不好,就像我的第一篇文章一样,我真的想查一下,因为我从昨天开始只做扫描仪,所以如果我在这里错了,请纠正我,我很高兴了解更多信息