提问人:ArtStyle.Qwerty 提问时间:11/23/2021 更新时间:11/23/2021 访问量:205
我犯了什么错误,无法读取数组对象的长度?
What is the mistake I made that cannot read the length of the array object?
问:
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
}
}
我有一个 setter 来保存添加的信息:
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() 中,当我检查数组对象是否为 null 时,我声明数组大小为 1,并通过调用默认构造函数初始化 team[0]。它可以在 addFighter() 中读取数组对象的长度为 1,但是为什么在 setData() 中无法读取长度,因为我已经将数组对象从 null 初始化为 1?
据我所知,NPE 发生在未启动的变量或对象被调用时,但为什么在我的情况下,NPE 发生在我的对象被启动时?
我不知道我犯了什么错误,需要一些灵感。谢谢:)
答:
2赞
Louis Wasserman
11/23/2021
#1
Team[] team=new Team[1];
您编写此行的方式创建了一个新变量,也称为 ,与 没有任何关系。team
this.team
执行所需操作的正确方法是将此行替换为
team=new Team[1];
评论
0赞
ArtStyle.Qwerty
11/23/2021
非常感谢您帮助我找到我的问题!谢谢!
0赞
Navneet Singh
11/23/2021
#2
请改用它,
public int addFighter()
{
if(team==null)
{
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
}
}
评论
Team[] team=new Team[1];
if
this.team
this.team = new Team[1]
Team[] team=new Team[1];
this.team=new Team[1];