2016-11-20 18 views
0

私はemployeeNameやemployeeNumberなどのプライベート変数を持つクラスと、employeeNameとemployeeNumberを設定して取得するメソッドを持っています。このクラスは「EmployeesInformation」と呼ばれます。このクラスには2つのコンストラクタがあります。 EmployeesInformation(String name, String phoneNumber){...}のような従業員の情報を取得するものと、同じ情報を取得するものと、文字列datefiredやString reasonForLeaveなどの2つの追加情報を受け取るものオブジェクトをある配列リストから別の配列リストに移動する

"MenuOptionMethods"と呼ばれる別のクラスでは、addEmployeeメソッドとfireEmployeeメソッドと従業員情報を表示する別のメソッドがあります。 私はこのクラスにemployeeとformerEmployeeという2つのarrayListを作成しました。

ユーザーが従業員を追加するたびに、従業員オブジェクトをemployeeというarrayListに配置します。ユーザーがその従業員の情報をすべて取りたいと思う従業員を雇うか、または削除するときは、それをarrayList employeeから削除し、arrayList formerEmployeeに追加します。それは私が問題を抱えているところです。誰かが自分のコードを見て、何が間違っているのか教えてください。

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()メソッドをコールする必要がある、ということを行うにして、それを反復しながら、あなたはリストから要素を削除することはできません

答えて

0

:。

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

ないように注意してください:すべての従業員にはユニークな名前を持っていると仮定すると、あなたは、この(私は他の1つのArrayListからその従業員オブジェクトを転送することにより、これらすべての新しい変数を作成する簡素化に注意してください)のような何かを行うことができますイテレータはどのように動作するのですか?私はそれを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); 

}

関連する問題