2014-12-19 352 views
2

我有三个类MainProcessEmployee。我的问题是,最后一个对象数组总是覆盖第一个。我认为逻辑没有问题,我只是使用getters和setter。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

你在说什么对象数组? – 2014-12-19 08:05:03

回答

5

你必须把

Employee[] tempList = new Employee[5]; 

您的生成方法内部和预期它会奏效。

否则,您将仅传递对数组的引用,并且下次您将覆盖同一个数组。

此外,其他两个数组不需要初始化,因为它们将被分配新创建的数组。

+0

另外,使用ArrayList或类似的代替旧的普通数组,Java集合容器对速度和大小进行了相当优化,并提供了许多有用的功能。 http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html – 2014-12-19 08:08:30

1

问题是tempList应该是一个局部变量而不是一个类变量。