2014-12-19 3 views
2

У меня есть три класса Main, Process и Employee. Моя проблема в том, что последний массив объектов всегда перезаписывает первый. Я не думаю, что есть проблема с логикой, я просто использую геттеры и сеттеры.Java-массивы объектов переписывают друг друга

public class Main { 

     public static void main(String args[]){ 
      Process p = new Process(); 

      p.setEmployeeList(p.generate()); 

      p.setExternalEmployeeList(p.generate()); 

      for(int i=0; i<5; i++){ 
       System.out.println(p.getEmployeeList()[i].getID()); 
      } 

      System.out.println(); 

      for(int i=0; i<5; i++){ 
       System.out.println(p.getExternalEmployeeList()[i].getID()); 
      } 

     } 

    } 

-

import java.util.Random; 

public class Process { 

    private int rndTemp; 
    private int numberOfDice = 5; 
    private Random random = new Random(); 
    public Employee[] employeeList = new Employee[5]; 
    public Employee[] externalEmployeeList = new Employee[5]; 
    private Employee[] tempList = new Employee[5]; 

    public Employee[] generate(){ 
     for(int i=0; i<numberOfDice; i++){ 
      rndTemp = random.nextInt((6 - 1) + 1) + 1; 
      Employee emp = new Employee(rndTemp); 

      tempList[i] = emp; 
     } 
     return tempList; 

    } 

    public Employee[] getEmployeeList(){ 
     return employeeList; 

    } 

    public Employee[] getExternalEmployeeList(){ 
     return externalEmployeeList; 

    } 

    public void setExternalEmployeeList(Employee[] externalEmployeeList){ 
     this.externalEmployeeList = externalEmployeeList; 
    } 

    public void setEmployeeList(Employee[] employeeList){ 
     this.employeeList = employeeList; 
    } 

} 

-

public class Employee { 

    public int empID; 

    public Employee(int empID) { 
     this.empID = empID; 
    } 


    public void setID(int empID) { 
     this.empID = empID; 
    } 

    public int getID() { 
     return empID; 
    } 
} 
+0

О каких объектных массивах вы говорите? –

ответ

5

Вы должны поставить

Employee[] tempList = new Employee[5]; 

внутри метода генерации и он будет работать, как ожидалось.

В противном случае вы передадите только ссылку на массив, а в следующий раз вы будете переписывать тот же самый массив.

Кроме того, два других массива не нужно инициализировать, так как им будет назначен вновь созданный массив.

+0

Кроме того, используйте ArrayList или аналогичные вместо старых простых массивов, контейнеры Java-коллекции довольно оптимизированы для скорости и размера и предлагают множество полезных функций. http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html –

1

Проблема в том, что tempList должна быть локальной переменной вместо переменной класса.