【发布时间】:2017-09-11 21:15:22
【问题描述】:
我想要实现的是:用户应该输入一个日期字符串。然后,我将获取每个日期并对其进行验证并将其添加到 ArrayList。 如果日期与正则表达式不匹配,则应重新启动 do while 循环并再次要求输入。
我正在验证一个方法中的多个输入,并且对于所有这些输入,我使用一个布尔值“inputNotApproved”来判断 do while 是否应该结束。它适用于更简单的验证,例如名称,但因为我必须在 do while 循环内运行一个额外的 while 循环,程序无法读取布尔值“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”的真/假。谢谢你。
我还尝试了以下方法,它对将布尔值设为 false 做出反应,但 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 循环中添加了一个 break 和 !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);
【问题讨论】:
-
“程序无法读取布尔值”是什么意思?你看到什么错误?这归结为变量的范围,如果在您的示例中它是在
do之前声明的,那么您在这里应该可以工作。 -
我没有收到错误,如果输入了错误的日期,do-while 循环不会重新开始,我希望系统再次请求输入(do-while 再次开始)。布尔值“inputNotApproved”在 do-while 循环之前声明。
-
在代码的第二部分它可以工作。但是检查日期的第一部分似乎对循环期间设置的 inputNotApproved 没有反应。
-
我对这样做的意图有点迷茫,但作为一个通用指针,如果您使用的是 IDE(如 Eclipse、IntelliJ或 NetBeans),了解如何设置断点,以便您可以逐行逐行执行代码并查看发生了什么。如果您不使用 IDE,则可以通过添加整个负载的临时
System.out.println语句来查看哪些代码在何时执行,以及每个点的变量值是什么,从而获得几乎相同的效果。