2016-11-20 5 views
0

Ich habe eine Klasse, die private Variablen wie employeeName und employeeNumber und Methoden hat, um employeeName und employeeNumber zu setzen und zu erhalten. Diese Klasse heißt "EmployeeInformation". In dieser Klasse habe ich zwei Konstruktoren. Eine, die Informationen des Mitarbeiters erhält, wie EmployeesInformation(String name, String phoneNumber){...}, und eine andere, die die gleichen Informationen erhält, aber auch zwei zusätzliche Bits von Informationen wie String datefired und String reasonForLeave erhält.ein Objekt von einer Array-Liste in eine andere verschieben

Jetzt in einer anderen Klasse namens "MenuOptionMethods" habe ich die addEmployee-Methode und fireEmployee-Methode und eine andere Methode, Mitarbeiterinformationen anzuzeigen. Ich habe zwei ArrayList in dieser Klasse namens Mitarbeiter und ehemaliger Mitarbeiter erstellt.

Immer wenn der Benutzer einen Mitarbeiter hinzufügt, lege ich dieses Mitarbeiterobjekt in die ArrayList namens Mitarbeiter. Wenn der Benutzer einen Mitarbeiter löscht oder löscht, möchte ich alle Informationen dieses Mitarbeiters übernehmen, ihn aus dem ArrayList-Mitarbeiter entfernen und ihn zu arrayList formerEmployee hinzufügen. Da habe ich Probleme. Kann jemand meinen Code ansehen und mir sagen, was damit nicht stimmt?

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 

} 

}

Antwort

0

Sie nicht Element aus der Liste entfernen kann, während es mit for-Schleife iteriert (es ConcurrentModificationException werfen Um das zu tun, müssen Sie Iterator verwenden und remove() Methode aufrufen, zB:.

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

Dies wird aus bestehenden Liste entfernen.

+0

nicht sicher Wie funktioniert der Iterator, aber wie würde ich ihn zu exemployee arrayList hinzufügen? –

+0

Sie können einfach 'examereEmployee.add (current); ' –

0

In Ihrer for-Schleife, Sie wollen keine zu entfernen, da die Größe der Arraylist zu tun wird sich ändern, und das schafft nur Whack, der dich abwirft. Unter der Annahme, jeder Mitarbeiter einen eindeutigen Namen hat, könnte man so etwas tun (man beachte ich vereinfacht alle, machen neue Variable von nur, dass Mitarbeiter Objekt von einem Arraylist auf den anderen zu übertragen):

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

}

Verwandte Themen