Java 当调用一个方法来设置一个变量时,我得到了nullpointerexception,该变量使用数组的元素来调用该方法
好的,我在这里得到一个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)
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;
}