【问题标题】:do while loop.. to proceed if correct input is given如果给出正确的输入,则执行while循环..继续
【发布时间】:2013-04-06 13:28:16
【问题描述】:

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

【问题讨论】:

  • 当您的内部while 条件为假时,date=keys.NextLine() 是否会被执行?
  • 试试调试,很有帮助。
  • 我添加了一个break;继续下一个问题,这样做是否正确?

标签: java while-loop do-while


【解决方案1】:

你那里有无限循环,把它改成:

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);

【讨论】:

  • 我参考您的代码进行了编辑。它显示输入日期,但在此之后,它也立即打印出不是有效日期。所以参考你的代码,我做了我上面编辑的。
  • 输入正确的输入后如何退出while循环?我想继续下一个要求,即提示用户选择
  • 只需删除所有的while循环并仅用这个替换它们,当条件满足时程序将退出while循环 - 当用户输入正确的日期时。我编辑了代码,现在它不会打印它不是有效的日期。
  • 感谢您的帮助!干杯!
【解决方案2】:

每个keys.nextLine 都接受另一个输入。您必须将输入读入一次变量,然后引用该变量!因为它是每个内部循环读取输入三遍。

EDIT根据您编辑后的代码,仍然存在问题。您仍然有两个地方可以读取输入 - 在 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 循环在那里确认它,如果日期证明无效,则再给一次机会。

如您所见,两种解决方案都有效,但一种理念是“我将您置于此循环中,在您输入有效日期之前我不会让您出去”,而另一种理念是“我会保留检查您输入的日期是否有效,直到“有效”。

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

【讨论】:

  • 我在上面编辑了我的代码。例如,如何退出 while 循环以继续。 System.out.println("请选择房间");然后另一个while循环让用户选择。如何退出第一个 while 循环?
  • 我添加了一个break;继续下一个问题是正确的做法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
相关资源
最近更新 更多