2016-10-23 4 views
-2

Я создаю программу, в которой есть массив с именем «student_id», который содержит целые числа идентификаторов. Я создал метод, в котором вы можете удалить идентификатор из массива, который я привел ниже. Однако, когда я пытаюсь его протестировать, он приходит со следующей ошибкой:Ошибка Java: «Исключение в потоке» main «java.lang.IndexOutOfBoundsException:«

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 332, Size: 3 
     at java.util.ArrayList.rangeCheck(ArrayList.java:653) 
     at java.util.ArrayList.remove(ArrayList.java:492) 
     at Module.removeStudent(Module.java:40) 
     at TestModule.main(TestModule.java:19) 

Что я сделал не так? Спасибо.

public boolean removeStudent(int id){ 
     //removes a student from the module 
     if (id >= 100 && id <= 99999999 && student_id.contains(id)){ 
      student_id.remove(id); 
      return true; 
     } else { 
      return false; 
     } 
    } 

    System.out.println("Testing removeStudent, the following inputs should return true"); 
    System.out.println("28262722: " + (test1.removeStudent(28262722))); 
+1

Вы пытаетесь удалить объект 332'nd из ArrayList, который содержит только 3 элемента - время, чтобы просмотреть вашу программную логику и исправить ее. –

+1

Возможно, вы захотите использовать другую удаленную перегрузку - ту, которая принимает параметр Object. Чтобы это сработало, вашему классу Student необходимо правильно переопределить значения equals и hashCode. –

+1

Ваша ошибка объясняет проблему: 'IndexOutOfBoundsException' обычно возникает, когда индекс, который вы пытаетесь получить, выходит за пределы допустимого диапазона. Вы пытаетесь удалить индекс '28262722', который может не существовать, но вы хотите удалить идентификатор вместо этого индекса, который я думаю. –

ответ

1

Как показано на сообщения об ошибке, вы пытаетесь удалить объект 332 в ArrayList, даже если есть только три объекта.

ArrayList.remove() может быть задан параметр либо объекта для удаления (что вы пытались сделать, я полагаю), либо индекса int. Вы пытаетесь передать ему int, чтобы удалить его int, но вместо этого он обрабатывает int как индекс и пытается удалить все, что находится в этом индексе.

Итак, когда вы звоните test1.removeStudent(28262722), вы не удаляете учащегося с этим ID - вместо этого вы удаляете ученика в 28262723-й позиции в ArrayList (я не уверен, почему ошибка возникает с индексом из 332.)

чтобы исправить это, вы должны использовать другой объект в ваших ArrayList (возможно int с замаскированным String с - т.е. "28262722" вместо 28262722), или вы должны удалить студент, основанный на индекс вместо id.

+0

Огромное вам спасибо, это имеет гораздо больше смысла! Я просто исправил его, используя цикл «for» вместо «удалить», чтобы удалить его. – assassinsweed1

+0

@fabian спасибо, что сообщили мне, отредактировали – Shannon

Смежные вопросы