проверка ввода пользователя: ввод даты - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть метод ниже, который просит пользователя предоставить дату с клавиатуры, мне нужно расширить свой код, чтобы проверить, действительно ли пользователь ввел данные в формате M / d / yyyy. Если нет, попросите еще раз повторить и исправить введенные данные, как я могу это реализовать?

    private static void extracted2(Doctor l1, Patient p1, List<Schedule> lista) {
    Scanner sc2 = new Scanner(System.in);
    System.out.println("provide data with format M/d/yyyy");

    while (true) {
        try {
            String userinput = sc2.next();
            DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("M/d/yyyy");
            LocalDate date = LocalDate.parse(userinput, dateFormat);
            Schedule g5 = new Schedule(5, l1, p1, date, false, false);
            lista.add(g5);
            for (Schedule x : lista) {
                System.out.println(x);
            }

        } catch (DataFormatException e) {
            System.out.println("Wrong data " + e.getMessage());
        }
    }

}

1 Ответ

0 голосов
/ 05 апреля 2020

Я думаю, что вы близки, но вот окончательное решение:
Удалены другие логи c из кода, поскольку они могут быть добавлены.

Scanner sc2 = new Scanner(System.in);
        LocalDate date = null;
        boolean isValid;
        do {
            try {
                System.out.println("Provide date format M/d/yyyy");
                DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("M/d/yyyy");
                String userinput = sc2.next();
                date = LocalDate.parse(userinput, dateFormat);
                isValid = true;
            } catch (DateTimeParseException exception) {
                isValid = false;
            }
        } while(!isValid);
System.out.println(date);

выход:

Provide date format M/d/yyyy
333
Provide date format M/d/yyyy
444
Provide date format M/d/yyyy
1/2/2020
2020-01-02
...