2016-04-23 49 views
-1

所以我有一個while循環來存儲我所有的變量,但我的問題是,只要程序循環它就會更改前一個數組中的對象的值。因此,employeeArray會填充所有具有相同值的對象,而不是存儲以前的值並創建一個新值。我正在讀取.csv文件中的文本。有人可以請我解釋如何存儲我的Employee對象,而不改變每個循環?讓我知道如果你需要任何澄清我知道我可能錯過了某些人試圖幫助我可能需要的信息。無論如何,我的代碼如下,我有3個不同的類,但我只是要把這個Employee和EmpQuery類放在這裏。我相信問題是在Employee類中的我的變量。請幫助我,這將不勝感激。將對象存儲在一個數組中,我的值在我的數組中保持不變

public class EmpQuery extends Employee { 

    public static void fillArrayObjects(Scanner s, Employee[] e){ 

     //VARIABLES 
     String sNextLine; 
     int counter = 0; 
     int parsedString; 

     String employeeID; 
     String employeeName; 
     String employeeDepartment; 
     String employeeStartDate; 
     int employeeEarnings; 

     //DECLARE ARRAY TO HOLD EMPLOYEE OBJECTS 
     Employee employeeArray[] = new Employee [50];//50 records I believe 

     while(s.hasNext()){ 

      //SCANNER AND SEPARATE STRING VALUE IN LINE 
      sNextLine = s.nextLine(); 

      String[] tempSplit = sNextLine.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1); 

      //REMOVE EVERYTHING EXPCEPT NUMBERS [4] 
      tempSplit[4] = tempSplit[4].replace(",",""); 
      tempSplit[4] = tempSplit[4].replace("$",""); 
      tempSplit[4] = tempSplit[4].replace("\"", ""); 
      tempSplit[4] = tempSplit[4].replace(".00",""); 
      parsedString = Integer.parseInt(tempSplit[4]); 

      //STORE TEMP SPLITS IN NEW VARIABLES 
      employeeID = tempSplit[0]; 
      employeeName = tempSplit[1]; 
      employeeDepartment = tempSplit[2]; 
      employeeStartDate = tempSplit[3]; 
      employeeEarnings = parsedString; 

      //CALLING FROM EMPLOYEE CLASS 
      Employee.enterData(employeeID, employeeName, employeeDepartment, employeeStartDate, employeeEarnings); 

      //STORE EACH NEW EMPLOYEE IN employeeArray 
      Employee i = new Employee(employeeID, employeeName, employeeDepartment, employeeStartDate, employeeEarnings); 
      employeeArray[counter] = i; 

      //TESTS 
      System.out.println(counter + " " + Employee.getEarnings(employeeArray[0]));//employee[1] keep changing every loop    

      //INCREMENT COUNTER 
      counter++; 

     } 

     System.out.println(Employee.getEarnings(employeeArray[12])); 
     System.out.println(Employee.getID(employeeArray[3])); 

    } 

*************************************NEW CLASS****************************** 

包employeedb;

/** * * @author丹尼爾 */ 公共類Employee {

//VARIABLES*************************************************************************************************** 
public String empID; 
public String empName; 
public String department; 
public String startDate; 
public int earnings; 

Employee newGuys; 



//EMPLOYEE********************************************************************************************************* 
public Employee(){ 

    empID = ""; 
    empName = ""; 
    department = ""; 
    startDate = ""; 
    earnings = 0; 
} 


public Employee(String iD, String name, String employeeDepartment, String startingDate, int salary){ 

    empID = iD; 
    empName = name; 
    department = employeeDepartment; 
    startDate = startingDate; 
    earnings = salary;   

} 

public Employee(String iD, String name){ 

    empID = iD; 
    empName = name; 

} 



//ENTER DATA******************************************************************************************************* 
public void enterData(){ 

    empID = ""; 
    empName = ""; 
    department = ""; 
    startDate = ""; 
    earnings = 0; 

} 


//ENTER DATA 
public void enterData(String iD, String name){ 

    empID = iD; 
    empName = name; 
    department = ""; 
    startDate = ""; 
    earnings = 0; 

} 


//ENTER DATA 
public void enterData(String iD, String name, String employeeDepartment, String startingDate, int salary){ 

    empID = iD; 
    empName = name; 
    department = employeeDepartment; 
    startDate = startingDate; 
    earnings = salary; 

} 



//VIEW SPECIFIC FIELD**************************************************************************************************** 
public void viewEmployeeID(Employee variable){ 

    System.out.println(empID); 

} 


public void viewEmployeeName(Employee variable){ 

    System.out.println(empName); 

} 


public void viewDepartment(Employee variable){ 

    System.out.println(department); 

} 


public void viewStartDate(Employee variable){ 

    System.out.println(startDate); 

} 


public void viewEarnings(Employee variable){ 

    System.out.println(earnings); 

} 



//VIEW DATA********************************************************************************************************** 
public void viewAllData(){ 

    empID = ""; 
    empName = ""; 
    department = ""; 
    startDate = ""; 
    earnings = 0; 

    System.out.println("Employee ID: " + empID); 
    System.out.println("Employee name: " + empName); 
    System.out.println("Employee department: " + department); 
    System.out.println("Employee start date: " + startDate); 
    System.out.println("Employee earnings: $" + earnings); 
    System.out.println(""); 

} 


//VIEW DATA 
public void viewData(String iD, String name, String employeeDepartment, String startingDate, int salary){ 

    empID = iD; 
    empName = name; 
    department = employeeDepartment; 
    startDate = startingDate; 
    earnings = salary; 

    System.out.println("Employee ID: " + empID); 
    System.out.println("Employee name: " + empName); 
    System.out.println("Employee department: " + department); 
    System.out.println("Employee start date: " + startDate); 
    System.out.println("Employee earnings: $" + earnings); 
    System.out.println(""); 

} 



//RETURN DATA********************************************************************************************************* 

//GET ID 
public String getID(Employee variable){//void 

    return empID; 

} 


//GET NAME 
public String getName(Employee variable){ 

    return empName; 

} 


//GET DEPARTMENT 
public String getDepartment(Employee variable){ 

    return department; 

} 


//GET START DATE 
public String getStartDate(Employee Variable){ 

    return startDate; 

} 


//GET EARNINGS 
public int getEarnings(Employee Variable){ 

    return earnings; 

} 

}

回答

1

的主要問題是,你在Employee靜態,設置該變量的平均值他們在班級的每一個實例中共享。 它們不應該是靜態的,所以每個對象都有自己的。

+0

好的,謝謝,但現在我得到這個錯誤:「不可編譯的源代碼 - 非靜態變量empID不能從靜態上下文中引用」,每當我嘗試使用Employee類中的方法時,即使當我使方法不再是靜態的。我究竟做錯了什麼? – Daniel

+0

看來你還在使用靜態方法,也許是對Employee.enterData的調用(這沒有意義,你應該刪除它)。否則,你應該顯示你的更新代碼。 –

+0

我更新了我的代碼並刪除了該方法的所有靜態部分。我需要使用'this.empID,this.empName'等嗎?我唯一的問題與非靜態部分是,現在我不能從其他類調用我的方法我得到的錯誤代碼:「不可編譯的源代碼 - 非靜態變量empID不能從靜態上下文引用」每次。 – Daniel

相關問題