Реализация try-catch внутри цикла - PullRequest
0 голосов
/ 13 июля 2020

Я хочу создать блок try-catch внутри al oop, чтобы дать пользователю несколько возможностей для ввода информации в правильном формате. Когда я ввожу что-то с неправильным форматом, программа отображает системное сообщение «Пожалуйста, введите имя и возраст в правильном формате». из блока catch.

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

Вот что у меня:

        int inAge;
        String inName;

        while (true) {
            try {
                inAge = Integer.parseInt((input.substring((input.indexOf(',') + 1))));
                inName = input.substring(0, input.indexOf(','));
                list.add(new Plant(inName, inAge));
                break;
            } catch (Exception e) {
                System.out.println("Please enter name and age with correct format.");
                in.next();
            }
        }

        System.out.println("Do you wish to continue? (Yes or No)");
        endOrNo = in.nextLine();

        if ("yes".equalsIgnoreCase(endOrNo))
            go = true;
        else
            go = false;

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Вам необходимо обновить значение входной переменной следующим образом.

while (true) {
            try {
                input = in.nextLine(); // accept input
                inAge = Integer.parseInt((input.substring((input.indexOf(',') + 1))));
                inName = input.substring(0, input.indexOf(','));
                list.add(new Plant(inName, inAge));
                break;
            } catch (Exception e) {
                System.out.println("Please enter name and age with correct format.");
                input = in.next();
            }
        }

        System.out.println("Do you wish to continue? (Yes or No)");
        endOrNo = in.nextLine();

        if ("yes".equalsIgnoreCase(endOrNo))
            go = true;
        else
            go = false;
 
0 голосов
/ 13 июля 2020

возможно, что вы вызовете next () вместо nextLine (), который может прочитать неверный ввод и продолжать возвращать вас к блоку исключения.

...