Я не уверен, дубликат это или нет (вероятно, так), но я не могу найти то, что ищу.

У меня есть статический ArrayList, содержащий объекты, созданные из конструктора в этом классе, или любого класса, расширяющего его:

public static ArrayList<Person> PersonList = new ArrayList<>();

public Constructor(....){
  PersonList.add(this);
}

Теперь я пытаюсь удалить объекты из этого arrayylist, используя index, но получаю ArrayIndexOutOfBounds: Array index out of range: (index).

Теперь я знаю, что эта ошибка говорит мне, что в указанной позиции нет элемента, но тогда я не понимаю, почему PersonList.size () возвращает 4 (если в списке 4 элемента).

Я новичок в java, поэтому надеюсь, что кто-нибудь может мне помочь. Вот код:

list.addMouseListener(new MouseAdapter() {
  @Override
  public void mousePressed(MouseEvent arg0) {
    if(SwingUtilities.isRightMouseButton(arg0)) {
      try {
        Person.PersonList.remove(list.getSelectedIndex());
        list.remove(list.getSelectedIndex());
        }catch (Exception e) {
          System.out.println(e);
        }
        System.out.println("Index: " + list.getSelectedIndex());
        updateData();
    }   
  }
});
0
Jonas Mohammed 29 Фев 2016 в 23:21

2 ответа

Лучший ответ

Меня это смущает:

public Constructor(....){
    PersonList.add(this);
}

Похоже, что каждый раз, когда вы создаете новый объект этого класса (человека, которого я предполагаю), вы добавляете его в список переменных класса. Я предполагаю, что каждый раз, когда вы создаете новый экземпляр этого класса, он сбрасывает глобальный список. Можете ли вы подтвердить, что PersonList не всегда size = 1? Я подозреваю, что это так, поэтому переместите этот список в другой класс

0
Ryan Sayles 29 Фев 2016 в 20:35

Хорошо, после небольшого тестирования кажется, что все работает нормально. Он выдает ошибку, сообщая мне, что он находится вне пределов, но после обновления .size() после каждого удаления он уменьшается.

Хотя я понятия не имею, почему это работает, если мне говорят, что это не так?

0
Jonas Mohammed 29 Фев 2016 в 20:39