增强了在尝试调用引发异常的方法时无法执行的for循环

时间:2019-02-15 14:09:26

标签: java arraylist exception-handling

我有2个班级:1.员工管理班级,它具有员工类型的数组列表; 2.员工班级。检查已经存在的异常后,我必须将员工添加到arraylist中。 我在就业管理课程中拥有的代码是。

    ArrayList<Employee> eme = new ArrayList<Employee>();
    boolean addEmployee(Employee emp){

    for(Employee e:eme)
    {
    if (e.getEmpId()==emp.getEmpId())
      {
        throw new AlreadyExistsException();
      }
    else if  (e.getEmpId()!=emp.getEmpId())
      {
       eme.add(emp);
      }
    return true;
    }

在我的员工类中,我有构造函数,getter和setters。在main方法中,我创建了一个员工管理类对象em,并称为addEmployee方法

    em.addEmployee(e1);

问题在于,由于雇员管理类中的arraylist为null,for循环未得到执行,因此我无法检查雇员是否已存在异常。如何解决呢? (这是我的练习作业)

2 个答案:

答案 0 :(得分:0)

您打算进行以下操作。

public boolean addEmployee(Employee emp) {
    for (Employee e: eme) {
        if (e.getEmpId() == emp.getEmpId()) {
           throw new AlreadyExistsException();
        }
    }
    eme.add(emp);
    return true;
}

这里不需要布尔结果。

应该在eme上的循环之外 添加到eme中-否则会引发ConcurrentModificationException。


提示

也可以这样写:

List<Employee> eme = new ArrayList<>();

或使用Set:

Set<Employee> eme = new TreeSet<>(Comparator.comparingLong(Employee::getEmpId));

if (!eme.add(emp)) {
    throw new AlreadyExistsException();
}

答案 1 :(得分:0)

您可以通过以下简单的if条件:

public void addEmployee(Employee emp) throws Exception {
    if (eme.size() == 0) {                          // add as list is empty
        eme.add(emp);
    } else {
        for (Employee e : eme) {                    // your logic as it is
            if (e.getEmpId() == emp.getEmpId()) {
                throw new Exception();
            } else if (e.getEmpId() != emp.getEmpId()) {
                eme.add(emp);
            }
        }
    }
}

您可以调整使 this 方法根据需要返回boolean的逻辑。这留给您作为练习!