java - 如何为输入错误日期的用户正确创建循环?

标签 java loops date parsing time

所以,我最近刚刚学会了如何创建一个循环,如果不满足某些条件,该循环可以重复特定的代码行。经过反复练习,我已经成功地能够在许多不同的程序中使用循环,但是当用户输入错误的日期格式时,我遇到了一个无法解决的问题。这是给我带来问题的代码:

循环:

while(true) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter the Date: ");

    date1 = scanner.next();

    SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
    Date date2=null;
    try {

        date2 = dateFormat.parse(date1);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    System.out.println("The date you've entered is: " + date2);
    break loop;
}

当我测试如果输入错误的日期会发生什么(例如我只是输入数字 3),它会继续执行下一行代码,同时告诉我无法解析输入的日期,因为格式错误。为什么不循环播放?这是它逐字给我的错误:

java.text.ParseException: Unparseable date: "3"

The date you've entered is: null

Customer 1 profile:
    at java.text.DateFormat.parse(Unknown Source)
    at Creations.Shop.main(Shop.java:82)

最佳答案

当您因 try block 中的代码失败而捕获 ParseException 时,将执行该 catch block 内的代码。因此,目前它只是使用 e.printStackTrace(); 语句打印堆栈跟踪(错误消息)。相反,您需要像这样的 continue 语句,

catch (ParseException e) {
   continue; // this skips the next code lines till the end of the loop
}

此外,您不需要每次都在循环中生成 Scanner 对象。您可以在 while 循环外初始化一次,然后在循环内使用它。

关于java - 如何为输入错误日期的用户正确创建循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53200137/

相关文章:

java - 实现不同存储策略的模式

Javascript/JQuery/Angular : Use a key to count number of times value occurs

javascript - 以 YYYY-MM-DD HH :MM:SS 格式比较 javascript 中的日期时间

linux - 给定日期返回前一个星期天

java - 自定义 DiscoveryClient 用于发现 Spring Cloud Config 服务器

java - 使用 url 在 jsp 文件上显示照片

c++ - 在 C++ 中嵌套 for()

java - 尽管Java中没有任何错误,但在输入Char之前代码崩溃

php - mssql > php > mysql 之间的日期转换/提取问题

java GC算法微调: CMS algorithm alone & combination