我犯了什么错误,无法读取数组对象的长度?

What is the mistake I made that cannot read the length of the array object?

提问人:ArtStyle.Qwerty 提问时间:11/23/2021 更新时间:11/23/2021 访问量:205

问:

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 发生在我的对象被启动时?

我不知道我犯了什么错误,需要一些灵感。谢谢:)

Java 数组 nullPointerException

评论

0赞 ernest_k 11/23/2021
当你在该块中时,你没有将 的值设置为你正在实例化的数组。您正在该 if 块的范围内创建一个新的数组变量。你应该有Team[] team=new Team[1];ifthis.teamthis.team = new Team[1]
0赞 Yousaf 11/23/2021
你是想写成吗?Team[] team=new Team[1];this.team=new Team[1];

答:

2赞 Louis Wasserman 11/23/2021 #1
Team[] team=new Team[1];

您编写此行的方式创建了一个新变量,也称为 ,与 没有任何关系。teamthis.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
    }   
    
}