【问题标题】:Java console - Remove element from arraylist, still shows up when printingJava 控制台 - 从数组列表中删除元素,打印时仍显示
【发布时间】:2021-01-17 16:16:31
【问题描述】:

我有一个可以使用构造函数添加的数组列表。这工作得很好,它们在打印时出现,但是当我删除它们时,它仍然显示在打印时的列表中,即使当我第二次尝试删除它时,它会显示“NullPointerException”,或者转到否则我的故障保险。因此问题必须出在印刷部分,还是我的想法完全错误?删除元素后不更新arraylist吗?

谢谢。

Instance stuff - 创建 Arraylist/constructor(employeeVar = int)

static Employees[] employee = new Employees[employeeVar];
static List<Employees> EmployeesAL = new ArrayList<>(Arrays.asList(employee));

打印数组列表

else{
    System.out.println("id: " + EmployeesAL.get(i).getEmployeeID() + "Name: " + EmployeesAL.get(i).getEmployeeName());
}

移除元素

else if (employee[idToRemove].getEmployeeID() == idToRemove && customer[idToRemove].getEmployeeName() != null){
    EmployeesAL.remove(idToRemove);
    employee[idToRemove] = null;
}
}

【问题讨论】:

    标签: java arraylist console-application


    【解决方案1】:

    您设置它的方式,EmployeesALemployee 完全不受约束。一个变化不会反映在另一个上。

    所以,当您的employee 中有:[Jane, Joe, Jack] 时,这意味着首先,EmployeesAL 也是[Jane, Joe, Jack]。但是,如果您随后删除了一个员工,则效果是数组中的条目被清空,但数组列表中的条目被删除。因此,删除 Joe 会导致 employee 成为 [Jane, null, Jack]EmployeesAL 成为 [Jane, Jack]。现在 Jack 在数组中的位置是索引 2 (employee[2]),在数组列表中是 1:EmployeesAL.get(1)。您的代码检查employee[idToRemove],然后要求EmployeeAL 删除该索引,这显然会失败。

    为什么你有 2 个具有相同数据的数据结构?别那样做。选择一个:要么有Employee[] employees,要么有List&lt;Employee&gt;。您可能只想要后者:

    List<Employee> employees = new ArrayList<>();
    employees.addAll(Arrays.asList(new Employee("Jane"), new Employee("Joe"), etc);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 2015-09-14
      • 2021-10-25
      • 2019-08-10
      • 1970-01-01
      相关资源
      最近更新 更多