#java #arraylist #console-application
#java #arraylist #консоль-приложение
Вопрос:
У меня есть arraylist, который я могу добавить к использованию конструкторов. Это работает отлично, и они отображаются при печати, но когда я их удаляю, они по-прежнему отображаются в списке при печати, хотя, когда я пытаюсь удалить его во второй раз, он говорит «NullPointerException» или переходит к моему отказоустойчивому else if. Поэтому проблема должна быть в части печати, или я думаю совершенно неправильно? Не обновляет ли он arraylist после удаления элемента?
Спасибо.
Материал экземпляра — создание Arraylist / constructor(employeeVar = int)
static Employees[] employee = new Employees[employeeVar];
static List<Employees> EmployeesAL = new ArrayList<>(Arrays.asList(employee));
Печать Arraylist
else{
System.out.println("id: " EmployeesAL.get(i).getEmployeeID() "Name: " EmployeesAL.get(i).getEmployeeName());
}
Удаление элемента
else if (employee[idToRemove].getEmployeeID() == idToRemove amp;amp; customer[idToRemove].getEmployeeName() != null){
EmployeesAL.remove(idToRemove);
employee[idToRemove] = null;
}
}
Ответ №1:
То, как вы его настроили, EmployeesAL
и employee
полностью не привязаны. Изменение в одном не отражается на другом.
Итак, когда у вас есть: [Jane, Joe, Jack]
в вашем employee
, это означает, что сначала тоже EmployeesAL
есть [Jane, Joe, Jack]
. Но если вы затем удалите сотрудника, в результате запись в массиве будет обнулена, но запись в arraylist будет удалена. Итак, удаление Joe приводит к employee
тому, что он существует [Jane, null, Jack]
и EmployeesAL
существует [Jane, Jack]
. Теперь позиция Джека в массиве равна индексу 2 ( employee[2]
), а в arraylist — 1: EmployeesAL.get(1)
. Ваш код проверяет employee[idToRemove]
, а затем запрашивает EmployeeAL
удаление этого индекса, что, очевидно, приведет к сбою.
Почему у вас есть 2 структуры данных с одинаковыми данными? Прекратите это делать. Выберите один: либо иметь Employee[] employees
, либо иметь List<Employee>
. Вероятно, вам нужно только последнее:
List<Employee> employees = new ArrayList<>();
employees.addAll(Arrays.asList(new Employee("Jane"), new Employee("Joe"), etc);