将对象存储在数组中,我的值在我的数组中不断变化

时间:2016-04-23 22:50:02

标签: java arrays object

所以我有一个存储我所有变量的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;

}

}

1 个答案:

答案 0 :(得分:1)

主要问题是您将Employee中的变量设置为静态,这意味着它们在类的每个实例中共享。 它们不应该是静态的,所以每个对象都有自己的。