2014-12-19 356 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應該是一個局部變量而不是一個類變量。