Индекс выходит за рамки, несмотря на то, что он не выходит за рамки?

#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 для обработки.