我有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循环没有被执行,并且我无法检查员工已经存在的异常。怎么解决这个? (我的执业任务)
你可以只用一个简单的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
的逻辑。这留给你作为练习!
您打算如下。
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();
}