-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;
}
}
好的,謝謝,但現在我得到這個錯誤:「不可編譯的源代碼 - 非靜態變量empID不能從靜態上下文中引用」,每當我嘗試使用Employee類中的方法時,即使當我使方法不再是靜態的。我究竟做錯了什麼? – Daniel
看來你還在使用靜態方法,也許是對Employee.enterData的調用(這沒有意義,你應該刪除它)。否則,你應該顯示你的更新代碼。 –
我更新了我的代碼並刪除了該方法的所有靜態部分。我需要使用'this.empID,this.empName'等嗎?我唯一的問題與非靜態部分是,現在我不能從其他類調用我的方法我得到的錯誤代碼:「不可編譯的源代碼 - 非靜態變量empID不能從靜態上下文引用」每次。 – Daniel