【问题标题】:How to save data in ArrayList in Java?如何在 Java 中将数据保存在 ArrayList 中?
【发布时间】:2015-06-24 15:27:38
【问题描述】:

我在 Company 类中有一个制作方法,并在 PayrollApp 类中调用它。首先!它工作正常,但每当我第二次调用该方法时,它都会抛出 indexoutofboundException。我在控制台上运行这个应用程序而不使用数据库。我想将所有员工对象添加到该数组列表中。

public class Company {
    private ArrayList<Employee> _employeeList = new ArrayList<Employee>();
    public void setAddEmployee(Employee c){
        _employeeList.add(c);
    }
}

Employee emp = new Employee(_name, _empId);
emp.setNumOfHoursPerWeek(_hoursPerWeek);
emp.setHourlySalary(_hourlySalary);
emp.setManagerName(_manager);
Company com = new Company();

com.setAddEmployee(emp);

【问题讨论】:

  • 发生在哪一行?您是否在 Google 上搜索过异常以努力了解它是什么以及为什么会发生?您是否使用调试器单步执行您的代码?
  • 要添加到ArrayList,您只需调用_employeeList.add(c); 不需要索引。其中似乎从未被初始化过。
  • 可能是因为您正在为索引计数器使用static int 字段。将其保持在进行处理的方法的范围内。

标签: java arrays arraylist collections


【解决方案1】:

问题是索引iCompany 的静态变量,而ArrayList _employeeList 不是。

所以变量 i 被对象的所有实例共享,而 ArrayList _employeeList 是一个实例变量。

所以第一次做 company.setAddEmployee() 时,它工作正常,因为 arrayList 都是空的,而 i 是 0,所以它工作,并且 i 递增到 1。

但是下次当您为不同的company 对象执行company.setAddEmployee() 时,该对象的arrayList 是空的,但i 是1,因为变量i 是静态的并且由所有实例(对象)共享Company 类。

您需要将ArrayList 也设为静态,或者您需要将i 设为非静态(成员变量),尽管您甚至可能不需要i(我们也可以使用_employeeList.add(&lt;element&gt;) 和它将添加到下一个可用索引处),但我无法评论您如何解决此问题,因为我不确定您要使用代码实现什么。

【讨论】:

  • 我有 _Employee 的 ArrayList。我希望每当我添加一个新员工时,它也应该添加到该数组列表中。我从代码中删除了 'i' 但仍然无法正常工作,
  • 你还遇到同样的错误吗?如果是这样,请使用最新代码和问题更新问题
  • @hemant 最新的错误是什么?从哪条线开始?堆栈跟踪会很好。
猜你喜欢
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 2023-03-09
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
相关资源
最近更新 更多