2016-11-20 108 views
0

我有一个类具有私有变量,如employeeName和employeeNumber以及设置和获取employeeName和employeeNumber的方法。这个类被称为“EmployeesInformation”。在这个类中,我有两个构造函数。一个获取员工信息的例如EmployeesInformation(String name, String phoneNumber){...},另一个获取相同的信息,但也收到另外两个信息,如String datefired和String reasonForLeave。将一个对象从一个数组列表移动到另一个

现在在另一个名为“MenuOptionMethods”的类中,我有addEmployee方法和fireEmployee方法以及另一种显示雇员信息的方法。 我在这个类称为员工和formerEmployee创建了两个数组列表。

每当用户添加一个雇员时,我都会将该雇员对象放入名为employee的arrayList中。当用户触发或删除员工时,我想要将该员工的所有信息都删除,请将其从arrayList员工中删除,并将其添加到arrayList前员工。那是我遇到问题的地方。有人可以看看我的代码,并告诉我它有什么问题吗?

public class menuOptionMethods { 
Scanner sc = new Scanner(System.in); 
private ArrayList<EmployeesInformation> employee; 
private ArrayList<EmployeesInformation> formerEmployee; 

public menuOptionMethods() { 
    employee = new ArrayList<EmployeesInformation>(); 
    formerEmployee = new ArrayList<EmployeesInformation>(); 
} 

public void addEmployee(String eName) {  
    String n = eName; 
    System.out.println(" Enter date hired: "); 
    String h = sc.next(); 
    System.out.println(" Enter employee's duty: "); 
    String d = sc.next(); 
    System.out.println(" Enter employee's phone number: "); 
    String pN = sc.next(); 
    System.out.println(" Enter employee's pay per hour: "); 
    double pPH = sc.nextInt(); 
    System.out 
      .println(" Enter any additional information about employee: "); 
    String l = sc.next(); 
    EmployeesInformation e = new EmployeesInformation(n, h, d, l, pN, pPH); 
    employee.add(e); 
} 

public void fireEmployee(String eName) { 
    // System.out.println("Enter employee's name: "); 
    // String name = eName; 
    System.out.println("Reason for employee's leave?: "); 
    String reason = sc.next(); 
    System.out.println("Enter date: "); 
    String dF = sc.next(); 
for(int i=0; i<employee.size(); i++){ 
     if(employee.get(i).getEmployeName().contains(eName)){ 
      n = eName; 
      h = employee.get(i).getDateHired(); 
      d = employee.get(i).getEmployeDuty(); 
      pH = employee.get(i).getPhoneNumber(); 
      pPH = employee.get(i).getEmployePay(); 
      l = employee.get(i).getAdditionalInformation(); 
      employee.remove(i); 
      } 
     } 
     EmployeesInformation fE = new EmployeesInformation(n,h,d,l,pH,pPH,reason,dF); // ERROR HAPPENS HERE 

} 

}

回答

0

而与环(它会抛出ConcurrentModificationException要做到这一点,你需要使用迭代器和调用remove()方法,如迭代它不能从列表中删除元素。

for(Iterator<Employee> iterator = employees.iterator() ; iterator.hasNext();){ 
    Employee current = iterator.next(); 
    if(current.getName().equals(name)){ 
     iterator.remove(); 
     //Add into former employees' list 
     break; 
    } 
} 

这将会从现有列表中删除。

+0

不知道迭代器是如何工作的,但是如何将它添加到formerEmployee arrayList中? –

+0

你可以做'formerEmployee.add(current);' –

0

在你的循环,你不想做任何删除,因为数组列表的大小将会改变,而这只会让你失望。假设每一个员工都有一个唯一的名称,你可以做这样的事情(注意我简化的通过只是转移该雇员对象从一个ArrayList中其他使所有这些新的变量):

int index; 
    for(int i=0; i<employee.size(); i++){ 
    if(employee.get(i).getEmployeName().contains(eName)){ 
     formerEmployee.add(employee[i]); //date fired and reason fired can be added later 
     index = i; 
     break; 
     } 
    } 
    employee.remove(i); 

}