2016-11-20 2 views
0

У меня есть класс, который имеет частные переменные, такие как employeeName и employeeNumber, и методы для установки и получения employeeName и employeeNumber. Этот класс называется «EmployeesInformation». В этом классе у меня есть два конструктора. Тот, который получает информацию о сотруднике, такую ​​как EmployeesInformation(String name, String phoneNumber){...}, и другую, которая получает ту же информацию, но также получает два дополнительных бита информации, такие как String datefired и String reasonForLeave.переместить объект из одного списка массивов в другой

Теперь в другом классе под названием «MenuOptionMethods» у меня есть метод addEmployee и метод fireEmployee и другой метод отображения информации о сотрудниках. Я создал два классаList в этом классе под названием employee и formerEmployee.

Всякий раз, когда пользователь добавляет сотрудника, я помещаю этот объект employee в массивList, называемый employee. Когда пользователь запускает или удаляет сотрудника, я хочу взять всю информацию этого сотрудника, удалить его из employeeList и добавить его в arrayList из прежнегоEmployee. Вот где у меня проблемы. Может кто-то взглянуть на мой код и рассказать мне, что с ним не так?

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

не уверен как работает итератор, но каким образом я могу добавить его в прежний массив элементов? –

+0

Вы можете просто сделать 'прежнийEmployee.add (текущий);' –

0

в ваш цикл, вы не хотите делать какие-либо удаления, так как размер ArrayList изменится, и это просто создает удар, который отбрасывает вас. Предполагая, что каждый сотрудник имеет уникальное имя, вы могли бы сделать что-то вроде этого (обратите внимание, я упрощена делает все эти новые переменные, просто передавая этот объект работника от одного 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); 

}

Смежные вопросы