所以我有一个存储我所有变量的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******************************
package employeedb;
/ ** * * @author Daniel * / 公共级员工{
//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;
}
}
答案 0 :(得分:1)
主要问题是您将Employee
中的变量设置为静态,这意味着它们在类的每个实例中共享。
它们不应该是静态的,所以每个对象都有自己的。