Java 尝试调用引发异常的方法时未执行增强for循环

Java 尝试调用引发异常的方法时未执行增强for循环,java,arraylist,exception-handling,Java,Arraylist,Exception Handling,我有2个类1.employee management类,它的arraylist为employee type&2。雇员类。在检查alreadyexists异常后,我必须将employee添加到arraylist中。 我在就业管理课上的代码是 ArrayList<Employee> eme = new ArrayList<Employee>(); boolean addEmployee(Employee emp){ for(Employee e:em

我有2个类1.employee management类,它的arraylist为employee type&2。雇员类。在检查alreadyexists异常后,我必须将employee添加到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;
    }

问题是,由于employee management类中的arraylist为null,因此没有执行for循环,并且我无法检查employee已经存在异常。如何解决这个问题?(这是我的实习作业)

你打算做以下几点

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<>();
List eme=new ArrayList();
或使用一套:

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

if (!eme.add(emp)) {
    throw new AlreadyExistsException();
}
Set eme=new TreeSet(Comparator.comparingLong(Employee::getEmpId));
如果(!eme.add(emp)){
抛出新的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);
            }
        }
    }
}

您可以根据需要调整使此方法返回
布尔值的逻辑。这是留给你的练习

欢迎来到堆栈溢出。请您将代码的格式设置得更容易阅读,并发布真实代码而不是伪代码,好吗?(这里的“Public”表明这不是您真正的代码。)它不需要是您实际的业务代码,而是一个演示相同问题的示例。如果你能把它扩展到a,那就更好了。当我调用addEmployee方法来添加员工时,它不会进入循环。eme列表不包含任何内容。@这就是为什么我的代码在循环后添加员工,以确保它尚未添加。
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);
            }
        }
    }
}