Как предотвратить расширение вектора, когда присвоенные значения дают ошибку NumberFormatException? - PullRequest
0 голосов
/ 15 апреля 2019

Я вставляю значения в мою командную строку ... целые числа, которые вводятся, будут вставлены в мой вектор, а такие строки, как "собака" и т. Д. Будут перехватываться NumberFormatException. Тем не менее, в моем коде я получаю ArrayIndexOutOfBoundsException ... Я понимаю, почему, но как я могу предотвратить это?

Я хочу, чтобы мой код распечатывал, что вектор принимает целые числа, но он отклоняет строки, и продолжает читать мой ввод в командной строке.

Дополнительная проблема, с которой я столкнулся ... как я могу получить ошибку, из-за которой строка печатается ?? Мой код дает мне «Для входной строки:« собака »», когда я просто хочу «собака»

    int i;
    int result;

    Vector numbers = new Vector();
    for (i = 0; i < args.length; i++) {
        try {
            result = Integer.parseInt(args[i]);
        System.out.println("Converter method says integer OK - " + result);
            numbers.add(i, result);
        } catch (NumberFormatException e) {
            System.out.println("Catch block says the argument" + e.getMessage() + "is ignored because" + e.getMessage());

        }
    }

Пример ввода: 11 22 33 собака 44 кошка 55 66

**

Мой вывод:

Метод преобразования говорит, что целое число в порядке - 11

Метод преобразования говорит, что целое число в порядке - 22 * ​​1018 *

Метод преобразования говорит, что целое число в порядке - 33

Блок Catch говорит аргумент для входной строки: «cat» игнорируется, потому что для входной строки: «cat»

Метод преобразования говорит, что целое число в порядке - 44

Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 4> 3

at java.base/java.util.Vector.insertElementAt(Vector.java:619)

at java.base/java.util.Vector.add(Vector.java:857)

at exceptionalcommandline.ExceptionalCommandLine.main(ExceptionalCommandLine.java:16)

**

Ожидаемый результат:

Преобразователь метод говорит целое число в порядке - 11

Преобразователь метод говорит целое число в порядке - 22 * ​​1035 *

Преобразователь метод говорит целое число в порядке - 33

Блок Catch говорит, что аргумент "cat" игнорируется, потому что "cat"

Метод преобразования говорит, что целое число в порядке - 44

Блок Catch говорит, что аргумент "собака" игнорируется, потому что "собака"

Преобразователь метод говорит целое число в порядке - 55

Метод преобразования говорит, что целое число в порядке - 66

1 Ответ

0 голосов
/ 15 апреля 2019

Даже если вы получите исключение, значение будет увеличиваться.Таким образом, между доступным индексом и значением i, которое вы хотите добавить после исключения, будет разрыв.Поэтому измените свой код на:

for (i = 0; i < args.length; i++) {
    try {
        result = Integer.parseInt(args[i]);
        System.out.println("Converter method says integer OK - " + result);
        numbers.add(result);
    } catch (NumberFormatException e) {
        System.out.println("Catch block says the argument" + e.getMessage() + "is ignored because" + e.getMessage());
    }
}
...