Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当调用一个方法来设置一个变量时,我得到了nullpointerexception,该变量使用数组的元素来调用该方法_Java_Arrays_Nullpointerexception - Fatal编程技术网

Java 当调用一个方法来设置一个变量时,我得到了nullpointerexception,该变量使用数组的元素来调用该方法

Java 当调用一个方法来设置一个变量时,我得到了nullpointerexception,该变量使用数组的元素来调用该方法,java,arrays,nullpointerexception,Java,Arrays,Nullpointerexception,好的,我在这里得到一个nullpointerexception: public int getIndex(int empNum) { int index = 0; for(int i = 0; i < employees.length; i++) { int en = employees[i].getEmployeeNumber(); //Exception is at this line if(en == empNum)

好的,我在这里得到一个nullpointerexception:

    public int getIndex(int empNum)
{
    int index = 0;
    for(int i = 0; i < employees.length; i++)
    {
        int en = employees[i].getEmployeeNumber(); //Exception is at this line

        if(en == empNum)
        {
            index = i;
        }
    }

    return index;
}
其中,employeeNum已通过以下方法定义并添加到我的数组中(此方法主要用于错误检查,以确保员工编号在我指定的范围内):

这是main调用的方法,用于设置数组中某个元素的值,其中ty是用户选择要设置的员工类型的选项。然后,在将所有信息一起发送到此方法之前,main方法会询问每个单独的变量:

 public void addEmployee(int ty, String fn, String ln, char mi, char gen, int empNum, boolean ft, double p)
{

    if(ty == 1)
    {
        employees[currentEmployees] = new HourlyEmployee(fn, ln, mi, gen, empNum, ft, p);

        currentEmployees++;
    }
    else if(ty == 2)
    {
        employees[currentEmployees] = new SalaryEmployee(fn, ln, mi, gen, empNum, ft, p);

        currentEmployees++;
    }
    else if(ty == 3)
    {
        employees[currentEmployees] = new CommissionEmployee(fn, ln, mi, gen, empNum, ft, p);

        currentEmployees++;
    }
}
好的,我停止了异常,没有初始化数组的所有元素。我所做的就是改变

for(int i = 0; i < employees.length; i++)
for(int i=0;i

for(int i=0;i
这样,它就不再将未初始化的值传递给我的方法。这样,我就不必在开始时初始化数组的所有值。currentEmployees变量是我的计数器,它告诉方法要添加下一个对象的数组索引

int en = employees[i].getEmployeeNumber(); //Exception is at this line
确保初始化
employees
数组中的所有元素

您刚刚初始化了
employees
数组,但没有初始化它的元素

public EmployeeManager()
{
    employees = new Employee[employeeMax];

    for(int i = 0; i< employees.length; i++) {
        // initialize elements
        employees[i] = // new Employee();
    }
    currentEmployees = 0;

}
public EmployeeManager()
{
员工=新员工[employeeMax];
对于(int i=0;i
是否有
员工
及其元素已初始化?是的,首先发生的是数组已初始化。在我已经向数组添加了值之后,我得到了这个异常。但是它的元素是否已初始化?@Neonjoe向我们显示初始化
员工的代码
then@TheKojuEffect我编辑了我的原始帖子,以显示我正在初始化阵列的位置。这更像是一条评论。事实上,已经有好几条评论表明了这一点,它们是在你将此作为答案发布前几分钟发布的。我不明白你在这里说什么。有一个菜单系统,可以一次添加一名员工,其中要求多个数据点(2个字符串、2个字符、一个int和一个boolean)。从这里,它将数组中的值设置为,我仍然不确定你在说什么。似乎如果我初始化了数组的每个值,那么我必须同时输入每个员工的所有相关信息,这完全否定了main实现的菜单系统。@Neonjoe,他说您找错了区域。employeeNumber[i].getEmployeeNumber()不会抛出NPE,因为employeeNumber为null(不可能是,它是一个基元),而是因为employees[i]为null。您实例化了该数组,但尚未将任何对象放入其中。因此,employees[i]处的对象未定义或为null。@Neonjoe显然我不知道您的实现细节。我想说的是,如果要像前面提到的
Brandon那样访问数组的属性,数组中的元素必须初始化。
for(int i = 0; i < employees.length; i++)
for(int i = 0; i < currentEmployees; i++)
int en = employees[i].getEmployeeNumber(); //Exception is at this line
public EmployeeManager()
{
    employees = new Employee[employeeMax];

    for(int i = 0; i< employees.length; i++) {
        // initialize elements
        employees[i] = // new Employee();
    }
    currentEmployees = 0;

}