尝试调用抛出异常的方法时,增强的for循环不会被执行

问题描述 投票:2回答:2

我有2个类1.employee管理类,它有一个雇员类型的arraylist和2. Employee类。在检查alreadyexists异常后,我必须将员工添加到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和setter。在main方法中,我创建了一个员工管理类对象em,并调用了addEmployee方法

    em.addEmployee(e1);

问题是因为员工管理类中​​的arraylist为null,for循环没有被执行,并且我无法检查员工已经存在的异常。怎么解决这个? (我的执业任务)

java arraylist exception-handling
2个回答
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);
            }
        }
    }
}

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


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();
}
© www.soinside.com 2019 - 2024. All rights reserved.