簡體   English   中英

將對象從一個數組列表移動到另一個數組列表

[英]move an object from one array list to another

我有一類具有私有變量(例如employeeName和employeeNumber)以及用於設置和獲取employeeName和employeeNumber的方法的類。 該類稱為“ EmployeesInformation”。 在這個類中,我有兩個構造函數。 一個獲取雇員的信息,例如EmployeesInformation(String name, String phoneNumber){...} ,另一個獲取相同的信息,但又接收另外兩個信息,例如String datefired和String reasonForLeave。

現在,在另一個名為“ MenuOptionMethods”的類中,我具有addEmployee方法和fireEmployee方法以及另一個用於顯示員工信息的方法。 我在此類中創建了兩個arrayList,分別稱為employee和viousEmployee。

每當用戶添加雇員時,我都會將該雇員對象放在名為employee的arrayList中。 當用戶解雇或刪除員工時,我要獲取該員工的所有信息,將其從arrayList員工中刪除,並將其添加到arrayList agoEmployee。 那就是我遇到問題的地方。 有人可以看看我的代碼並告訴我它怎么了嗎?

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

}

}

在使用for循環進行迭代時,不能從列表中刪除元素(它會拋出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;
    }
}

這將從現有列表中刪除。

在您的for循環中,您不希望執行任何刪除操作,因為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);

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM