我正在尝试做一个while循环,但它一直在我身上失败。 因此,虽然用户未输入日期,但这将保持运行直到输入有效日期。 isValidDate是一种检查日期是真还是假的方法。只有输入dd / mm / yy时,日期才会为真。
我试图检查日期是否正确。如果正确,它将被存储到字符串日期,程序将继续。 如果不正确,程序将再次提示用户输入正确的日期。
当我第一次输入错误的日期时,它会提示我输入正确的日期。 此时,当我输入正确的日期时,程序无法再验证它是否是正确的日期。为什么会这样?
请帮忙!
public void bookingA(){
bkList = new ArrayList<bookingInfo>();
Scanner keys = new Scanner(System.in);
String date;
System.out.println("\nEnter the date: ");
while(!isValidDate(keys.nextLine())) {
do {
System.out.println("That is not a valid date! Please enter again (dd/mm/yy): ");
date = keys.nextLine();
} while (!isValidDate(date));
System.out.print(date);
break;
}
}
答案 0 :(得分:3)
你在那里有无限循环,把它改成:
System.out.println("\nEnter the date (dd/mm/yy): ");
while (true) {
date = keys.nextLine();
if (isValidDate(date)) {
break;
} else {
System.out.println("That is not a valid date! Please enter again (dd/mm/yy): ");
}
}
System.out.print(date);
答案 1 :(得分:0)
每个keys.nextLine
都需要另一个输入。您必须将输入读入变量一次,然后参考变量!因为它是每个内循环读取输入三次。
编辑根据您编辑后的代码,仍然存在问题。你还有两个地方可以读取输入 - 在while循环中,在条件中。当你只需要一个时,你还有两个while循环。我删除了几行,并在循环开始之前向date
添加了初始赋值。这可以解决这个问题:
public void bookingA(){
bkList = new ArrayList<bookingInfo>();
Scanner keys = new Scanner(System.in);
String date;
System.out.println("\nEnter the date: ");
date = keys.nextLine();
while(!isValidDate(date)) {
System.out.println("That is not a valid date! Please enter again (dd/mm/yy): ");
date = keys.nextLine();
}
System.out.print(date);
注意 - 我试图维护你的代码的一些结构(即实际测试变化条件的while
)但是Milos给出的答案(它具有一个无限循环,你可以在由于您不需要在输入之前将日期设置为某个项目,因此日期有效)可能是更好的解决方案。另一方面,您可以说在代码中我建议您的假设是用户已输入有效日期,并且while循环用于确认它,如果日期证明无效,则给予另一次机会。
正如你所看到的,这两种解决方案都有效,但其中一个的理念是“我让你进入这个循环,我不会让你出去,直到你输入一个有效的日期”,而另一个是“我会继续检查您输入的日期是否有效,直到它为“。
但两者都比原始代码更具可读性。一个简单的任务需要简单的代码结构。值得为之奋斗。