Как правильно создать цикл для пользователя, который неправильно ввел дату? - PullRequest
0 голосов
/ 08 ноября 2018

Итак, я только недавно узнал, как создать цикл, который может повторять определенную строку кода, если определенные критерии не выполняются.После повторяющейся практики я успешно смог использовать цикл со многими различными программами, но я столкнулся с проблемой, которую не могу решить, когда дело доходит до того, что пользователь вводит неправильный формат даты.Вот код, который вызывает у меня проблемы:

loop:

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)

1 Ответ

0 голосов
/ 08 ноября 2018

Когда вы перехватываете ParseException из-за сбоя кода в блоке try, код внутри этого блока catch будет выполняться.Итак, в настоящее время это просто печать трассировки стека (сообщение об ошибке) с помощью оператора e.printStackTrace();.Вместо этого вам нужен оператор continue, например, так:

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

Кроме того, вам не нужно каждый раз генерировать объект Scanner в цикле.Вы можете инициализировать его один раз вне цикла while и позже использовать внутри цикла.

...