while循环不向每个循环添加数据新创建的对象?在java中

时间:2011-10-26 01:45:54

标签: java while-loop instantiation setter

大家好,再次感谢您抽出时间来研究我的问题。

我正在尝试创建一个程序来跟踪员工和他们正在工作的不同部门。

程序首先从文本文件中读取所有初始数据以使程序运行。然后程序在while循环中有一个while循环。第一个循环将读取部门详细信息,然后创建部门

然后在下一个(内部)while循环中读取与该部门相关的所有员工,然后在阅读员工的详细信息后创建员工并将其添加到先前创建的部门,说这是我工作的部门英寸

将所有员工添加到部门后,它会退出该内部循环,并将部门内的员工发送到mainDriver进行存储。它为其余部门再次添加相关员工等执行此操作。

问题是:它似乎创建了每个部门并将其添加到mainDriver,但是所有员工都被添加到第一个部门,剩下的部门都是空的。这不是应该工作的方式,因为他们是每个部门的几名员工 为什么它不会转移到下一个部门,因为新的部门被实例化了?

我可以帮忙看看我可能会出错的地方。

这是读入数据的代码。

 while  (index < numberOfDepartmentsToRead ) 
{
        String depName1    = inFile.nextLine();
        String location1     = inFile.nextLine();
        String numberOfEmps = inFile.nextLine();
        int    numberOfEmps1 = Integer.parseInt(numberOfEmps);
        Department newDepartment = new Department(depName1 , location1);

    while (i < numberOfEmps1 )
    {
        String fName     = inFile.nextLine();
        String lName     = inFile.nextLine();
        String gender    = inFile.nextLine();
        String address   = inFile.nextLine();
        String   payLevel  = inFile.nextLine(); 
        int dPayLevel = Integer.parseInt(payLevel);
        Employee employeesFromList = new Employee(randomIDno, fName, lName, gender, dPayLevel);
        newDepartment.setAddEmp(employeesFromList, randomIDno);
        i++;
    }

    i = 0;
    index++;
    MainDriver.setDepartmentToSystem(newDepartment);        
} 

员工在部门类中传递给此方法

public static void setAddEmp(Employee theEmp, int idNumber)
{
    employeesInThisDepartment.add(theEmp);
    employeeMap.put(idNumber, theEmp);
}

将部门添加到mainDriver类存储方法,即此

public static void setDepartmentToSystem(Department theDepartment)
        {

            allDepartments.add(theDepartment);
        } 

4 个答案:

答案 0 :(得分:1)

public static void setAddEmp(Employee theEmp, int idNumber)

为什么静态?使它成为实例方法。

制作employeesInThisDepartment实例变量,而非静态

答案 1 :(得分:1)

您可能想检查一下static的使用情况。如果没有看到你的所有代码,很难知道,但我想知道setAddEmp 是否应该是静态方法。

答案 2 :(得分:1)

您的employeesInThisDepartmentstatic变量,而每个Department需要一个。

每个Department都应该有自己的实例,具有employees属性,部门的员工将添加到该实例中。同样,将员工添加到部门的方法应该是实例方法,而不是静态方法。

答案 3 :(得分:1)

Binyomin,我认为你内在的控制者做错了......

while (i < numberOfEmps1 ){ i++; }

我认为这个循环将遍历文件中的所有员工。然后内循环的下一次迭代将返回EOF ...

尝试发布您的文件结构..