Как предотвратить расширение вектора, когда присвоенные значения выдают ошибку NumberFormatException?

#java #vector #command #try-catch

#java #вектор #команда #попробуйте-поймать

Вопрос:

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

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

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

     int i;
    int resu<

    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

**

Мой вывод:

Метод конвертера выдает целое число OK — 11

Метод конвертера выдает целое число OK — 22

Метод конвертера выдает целое число OK — 33

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

Метод конвертера выдает целое число OK — 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)
 

**

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

Метод конвертера выдает целое число OK — 11

Метод конвертера выдает целое число OK — 22

Метод конвертера выдает целое число OK — 33

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

Метод конвертера выдает целое число OK — 44

Блок Catch сообщает, что аргумент «dog» игнорируется, потому что «dog»

Метод преобразования говорит, что целое число OK — 55

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

Комментарии:

1. Переключитесь numbers.add(i, result); на numbers.add(result); и спросите себя, что вы пытались там сделать. Вы хотите добавить в конец списка. Однако, когда есть не-число, вы пытались вставить его в одном месте после конца списка. numbers.add(result); всегда добавляйте в конец списка.

2. » Бьется головой о стену » спасибо вам за это! У вас также есть лекарство от моей ситуации «e.get.message ()»? Я ценю вашу помощь!

3. Просто используйте аргументы [i] вместо e.GetMessage()

4. Изменить e.getMessage() на args[i] ?

Ответ №1:

Даже если вы получите исключение, значение i все равно будет увеличиваться. Таким образом, между доступным индексом и значением 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());
    }
}