#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());
}
}