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

Enhanced for loop not getting executed when trying to call a method which throws an exception

我有 2 个 classes 1.employee 管理 class,它有一个员工类型数组列表和 2 个员工 class。在检查 alreadyexists 异常后,我必须将员工添加到数组列表中。 我在就业管理中的代码 class 是。

    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;
    }

在我的员工中 class 我有构造函数、吸气剂和 setters.In 主要方法 我创建了一个员工管理 class 对象 em,并调用了 addEmployee 方法

    em.addEmployee(e1);

问题是因为员工管理中的arraylist class 为空,for循环没有被执行,我无法检查员工已经存在的异常。如何解决这个问题? (这是我的练习作业)

您的意图如下。

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<Employee> eme = new TreeSet<>(Comparator.comparingLong(Employee::getEmpId));

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

您可以只使用一个简单的 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 方法 return 成为 boolean 的逻辑。留给你做练习!