Java 类公司中的NullPointerException

Java 类公司中的NullPointerException,java,Java,有两类:工人和公司。 在公司级别中,有: public class Company { private worker[] p; private int currentID; private String nameCO; Company(String cNameCO){this.nameCO = cNameCO;} public boolean hireWorker(worker w){ p[this.currentID].setName

有两类:工人和公司。 在公司级别中,有:

public class Company {
    private worker[] p;
    private int currentID;
    private String nameCO;

    Company(String cNameCO){this.nameCO = cNameCO;}

    public boolean hireWorker(worker w){
        p[this.currentID].setName(w.getName));
        p[this.currentID].setSurName(w.getSurName));
        return true;
}
最后出现了一个错误
java.lang.NullPointerException


怎么了?请帮帮我。

我认为有几件事你需要改变:
1. <代码>私人工作者[]p未初始化。
2.
w.getName
w.getName
是方法,应该以一对括号结束
()


此外,请使用不断增长和收缩的数据结构,如
ArrayList
,因为不会有固定数量的员工。

最有可能的
p
null
,因为您没有将其设置为任何值

 private Worker[] p = new Worker[100];
然而,更好的选择是使用这样的列表

 private final List<Worker> workers = new ArrayList<>();

 public void hireWorker(Worker w) {
     workers.add(w);
 }
private final List workers=new ArrayList();
公共租赁工(工人w){
增加(w);
}

或者
p
p[this.currentID]
或者
worker w
为空,调试肯定会有帮助。加上
getName
getName
看起来不像正确的方法调用,您确定提供的代码可以编译吗


我的选择是你没有用一个值初始化
p
,导致默认值为
null
(对象)。

首先,对不起,我的英语很差。我将尝试向您解释此代码中的错误

在公共布尔函数hireWorker中,需要关闭whit'}'

然后修改向量p[],但在任何站点中初始化此数组。然后,当您执行p[1].setName('herius')时,java抛出java.lang.NullPointerException


您需要先初始化向量。

您还没有初始化工作数组和currentID-因此,尝试使用int(=0)的初始值访问数组的字段实际上是non-但是您尝试访问其中的setName方法,因此在访问p[0]时实际抛出NPE。setName(…)因为那里没有worker对象。(顺便说一句,我刚刚在链接带有Java 8 int的数据类型时发现,在Integer.class:的帮助下,这些数据类型将能够保存无符号值。)感谢您描述我的观点,这就是我说的
p[this.currentID]
为空-无论索引是否存在问题,就像在NPE之前发出ArrayIndexOutOfBoundsException一样-因为不是这种情况,我假定索引是有效的,无论是默认索引还是自定义索引。