#java #arrayindexoutofboundsexception
#Ява #исключение arrayindexoutofboundsexception
Вопрос:
Я создаю java-программу для школьных занятий, в которой вы можете добавлять, перемещать и удалять материалы из контейнеров. Я должен использовать такие команды, как «добавить 100», «удалить 50». Команда остановки «лопета» состоит всего из одного слова, но другие команды состоят из двух частей: command и int. Когда я использую команду stop, я получаю ошибку Index out of bounds, но все остальное работает. Я думаю, это потому, что в команде stop есть только слово и нет int, но как мне предотвратить эту ошибку? Это работает, если я использую «lopeta 0», но я хочу использовать только «lopeta». Извините, что имена на финском, но я надеюсь, что вы сможете разобраться в этом. Вот мой код
String luettu = lukija.nextLine(); String[] osat = luettu.split(" "); String komento = osat[0]; int maara = Integer.valueOf(osat[1]); if(luettu.equals("lopeta")) { break; } if(komento.equals("lisaa")) { if(maara lt; 0) { ensimmainen = ensimmainen 0; } else { ensimmainen = ensimmainen maara; } if(ensimmainen gt; 100) { ensimmainen = 100; } } else if (komento.equals("siirra")) { if(maara lt; 0) { ensimmainen = ensimmainen 0; } if(maara gt; ensimmainen) { ensimmainen = 0; } if (toinen maara gt; 100) { toinen = 100; } else { ensimmainen = ensimmainen - maara; toinen = toinen maara; } } else if (komento.equals("poista")) { if(maara gt; toinen) { toinen = 0; } else { toinen = toinen - maara; } }
Комментарии:
1. Переместите проверку
if(luettu.equals("lopeta"))
перед разделением строк и доступом кosat
2. Вы должны добавить фактическую ошибку с номером строки.
3. Компьютер не ошибается. Если ваш код создает исключение IndexOutOfBoundsException, то индекс выходит за рамки. Нет смысла верить в обратное.
Ответ №1:
String[] osat = luettu.split(" "); String komento = osat[0]; int maara = Integer.valueOf(osat[1]);
Вы разбиваете строку на основе пробела (» «). Теперь, когда есть строка «lopeta 0», вы получаете массив [«lopeta»,»0″]. Когда вы делаете osat[1], вы получаете «0», но когда у вас есть только строка «lopeta», и вы разделяете строку, результирующий массив содержит только 1 элемент [«lopeta»]. Таким образом, вы получите исключение ArrayIndexOutOfBoundsException, потому что 2-го элемента нет.
Либо вы можете проверить размер массива перед доступом к элементу, либо, если у вас есть представление об исключениях, вы можете использовать блок try, catch для обработки.