如果给出了正确的输入,则执行while循环..

时间:2013-04-14 10:38:12

标签: java while-loop do-while

我正在尝试做一个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;
        }
}

2 个答案:

答案 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循环用于确认它,如果日期证明无效,则给予另一次机会。

正如你所看到的,这两种解决方案都有效,但其中一个的理念是“我让你进入这个循环,我不会让你出去,直到你输入一个有效的日期”,而另一个是“我会继续检查您输入的日期是否有效,直到它为“。

但两者都比原始代码更具可读性。一个简单的任务需要简单的代码结构。值得为之奋斗。