Java - 如果无法读取 boolean 值,如何停止或继续 DO WHILE 循环

标签 java boolean

我想要实现的是:用户应该输入一个日期字符串。然后我将获取每个日期并验证它并将其添加到 ArrayList 中。 如果日期与正则表达式不匹配,则应重新启动 do while 循环并再次要求输入。

我正在验证方法中的多个输入,并且对于所有输入,我使用 boolean 值“inputNotApproved”来判断 do while 是否应该结束。它可以很好地处理更简单的验证,例如名称,但因为我必须在 do while 循环内运行额外的 while 循环,所以程序无法读取 boolean 值“inputNotApproved”。

如果某些日期与正则表达式不匹配,如何告诉 do while 循环重新启动。

do {
ArrayList<String> inputDatesList = new ArrayList<String>(); 
System.out.print("Available booking dates (DD-MM-YYYY DD-MM-YYYY ...): ");

       while(input.hasNext()){
            String date = input.next();

            if(date.matches("(0?[1-9]|[12][0-9]|3[01])-(0?[1-9]|1[012])-((20)(17|18))")){
                inputDatesList.add(date);
                inputNotApproved = false;
            }
            else{
                inputNotApproved = true;
                System.out.println("The date format is not correct (DD-MM-YYYY).");
            }
        }
}
while(inputNotApproved);

我使用它和 inputNotApproved 按预期工作的示例:

do {
            System.out.print("Email address: ");
            String inputEmail = input.nextLine();

            if(inputEmail.matches("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$")){
                inputNotApproved = false;
                newDentist.setEmail(inputEmail);
            }
            else {
                System.out.println("ERROR! The email is not in the correct format.");
                inputNotApproved = true;
                }
}

    while(inputNotApproved);

非常感谢任何帮助。如何让循环监听“inputNotApproved”的真/假。谢谢。

我还尝试了以下操作,它的 react 是使 boolean 值为假,但 do-while 不会继续。

do {
            ArrayList<String> inputDatesList = new ArrayList<String>();
            System.out.print("Available booking dates (DD-MM-YYYY): ");
            inputNotApproved = true;

            while(input.hasNext() && input.hasNext("(0?[1-9]|[12][0-9]|3[01])-(0?[1-9]|1[012])-((20)(17|18))")){
                String date = input.next();
                inputDatesList.add(date);
                inputNotApproved = false;
            }


            if (!input.hasNext("(0?[1-9]|[12][0-9]|3[01])-(0?[1-9]|1[012])-((20)(17|18))")){
                System.out.println("The date format is not correct (DD-MM-YYYY).");
                continue;
            }
while(inputNotApproved);
<小时/>

最新更新。

我在内部 while 循环中添加了一个中断和 !inputNotApproved。但现在我注意到,当日期输入正确并且与正则表达式匹配时,循环不会结束。它只是不断接受输入。

我的代码现在看起来像这样:

do {
            ArrayList<String> inputDatesList = new ArrayList<String>(); // Temporary ArrayList, will be sent to ArrayList in Dentist class
            System.out.print("Available booking dates (DD-MM-YYYY): ");

        while(input.hasNext() && !inputNotApproved){
            String date = input.next();

            if(date.matches("(0?[1-9]|[12][0-9]|3[01])-(0?[1-9]|1[012])-((20)(17|18))")){
                inputDatesList.add(date);
                inputNotApproved = false;
            }
            else{
                inputNotApproved = true;
                System.out.println("The date format is not correct (DD-MM-YYYY).");
                break;
            }
        }
}
    while(inputNotApproved);

最佳答案

我认为这取决于您的具体要求 - 例如,如果日期无效,您希望用户重新输入所有日期,还是仅输入无效日期?

作为一个初学者,我认为满足您的要求,您可以在内部 while 循环中添加一个附加条件,使其类似于:

while (input.hasNext() && !inputNotApproved)

这个逻辑感觉有点困惑,所以你最好将内部 while 循环提取到一个单独的方法中,如果格式正确,它可以返回日期列表,如果格式不正确,则抛出异常。在您的 do...while 循环中,您只需捕获异常,并设置变量以触发它再次请求输入。

关于Java - 如果无法读取 boolean 值,如何停止或继续 DO WHILE 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43431395/

相关文章:

java - 运行 mvn 时出错 :generate to generate NEW project

java - 维护顺序的列表实现

java - Java 测试是否有某种 "hidden @Ignore"

java - Java 中的 boolean 字段输出不正确

c++ - 为什么 std::foreach 不能与 std::vector<bool> 一起使用?

java - 使用特定第三方或 java.* 方法或构造函数时触发错误

java - 从java程序向shellinabox传递命令

c++ - get 方法上的代码崩溃,C++

c# - if 语句中的空条件 boolean 值

python - 在 Python 中将 boolean 表达式计算为字符串的更快方法