【发布时间】:2022-01-01 15:06:30
【问题描述】:
public int addFighter()
{
if(team==null)
{
Team[] team=new Team[1];//increase the size by 1 from null to 1
team[0]=new Team(); //calling default constructor
return team.length;//the array length here is printable
}
}
我有一个设置器来保存添加的信息:
public void setData(String type, int healthUnits)
{
int length=this.team.length;//NullPointerException
this.team[length-1].setType(type);
this.team[length-1].setHealth(healthUnits);
}
我的问题是什么?
在addFighter()中,当我检查数组对象为空时,我声明数组大小为1,并通过调用默认构造函数初始化team[0]。在addFighter()中可以读取数组对象的长度为1,但是为什么在setData()中无法读取长度,因为我已经将数组对象从null初始化为1?
据我了解,当调用未初始化的变量或对象时会发生 NPE,但为什么在我的情况下,当我的对象被初始化时会发生 NPE?
我不知道我犯了什么错误,需要一些灵感。谢谢:)
【问题讨论】:
-
当您在
if块中有Team[] team=new Team[1];时,您不会将this.team的值设置为您正在实例化的数组。您正在该 if 块的范围内创建一个新的数组变量。你应该有this.team = new Team[1] -
你是不是要把
Team[] team=new Team[1];写成this.team=new Team[1];?
标签: java arrays nullpointerexception