【问题标题】:while loop not adding data to each loops newly created object? in javawhile 循环不向每个循环新创建的对象添加数据?在java中
【发布时间】:2011-10-26 01:45:54
【问题描述】:

大家好,再次感谢您抽出宝贵时间查看我的问题。

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

程序首先从一个文本文件中读取所有初始数据以使程序运行。然后程序在一个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);
        } 

【问题讨论】:

  • 我假设 i 在第一个循环之前被初始化为零?
  • 我重复我前几天的问题——你使用什么资源来学习 Java?似乎很多问题都是基本的语言级问题,可以通过 Java 基础概述快速解决。

标签: java while-loop instantiation setter


【解决方案1】:
public static void setAddEmp(Employee theEmp, int idNumber)

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

制作employeesInThisDepartment 实例变量而不是静态

【讨论】:

  • 只是因为如果它不是静态的,我得到错误无法从静态上下文引用,
  • 这个 b 会导致问题吗?
  • @Binyomin:静态表示它属于类。并非所有实例都有自己的。
  • 但是当我把它设为静态时,它会导致更多问题,然后它的价值。哦,好吧,我想我别无选择。哈哈
  • 我现在正在删除静态方法中的大多数静态声明。我现在收到错误“主线程不兼容类更改错误预期静态方法 mainDriver.setEmployee 中的异常”。为什么它会期待一个静态的??
【解决方案2】:

您可能需要检查您对static 的使用情况。不看你所有的代码很难知道,但我想知道setAddEmp是否应该是一个静态方法。

【讨论】:

    【解决方案3】:

    您的employeesInThisDepartment 是一个static 变量,而您需要一个Department

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

    【讨论】:

    • 再次感谢戴夫,很抱歉再次感到痛苦,但是我如何将其编码与我现在所拥有的不同,以便每个部门都有自己的实例?
    • @Binyomin 无需道歉 :) 您已经在创建一个新实例,只是 Department 类没有像 期望 那样被实例化.正如我和其他人所说,减少静态的东西。
    • 但是当我把它设为静态时,它会导致更多问题,然后它的价值。哦,好吧,我想我别无选择。既然您提到了它,那么静态类将导致它的所有创建仅添加到它是有意义的。嗯,我必须使其在没有静态的情况下工作。谢谢
    • @Binyomin 但是数据模型是这样的,有多个部门。这就是为什么我鼓励您查看一些 Java 语言基础知识,因为这是您在开发的每一天都会使用的关键基础知识,无论是使用 Java 还是其他基于类的 OO 语言。
    • 是的,一旦我启动了这个程序,我就会坐下来重新学习 Java 的一些基础知识。
    【解决方案4】:

    Binyomin,我认为你内心的控制器弄错了......

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

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

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

    【讨论】:

    • 外循环读入员工人数,并用它来控制内循环;它应该在读入正确数量的员工后停止(假设没有数据问题)。
    猜你喜欢
    • 2015-06-29
    • 2019-08-13
    • 2014-11-14
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    相关资源
    最近更新 更多