首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免java.lang.NullPointerException错误

如何避免java.lang.NullPointerException错误
EN

Stack Overflow用户
提问于 2013-11-07 11:56:31
回答 2查看 730关注 0票数 2

我的代码有点问题。

首先,这是我的密码。

代码语言:javascript
运行
复制
public class Zoo {
public int j=0;
public Animal[] park;

// Exercise 9
public Zoo() {
    Animal[] park = new Animal[10];
}

// Exercise 10
public void addAnimal(Animal first) {
    for (int i = 0; i < 10; i++) {
        if (park[i] != null) {
            park[i] = first;
            i=j;
            i = 10;
        } else if (i == 9) {
            System.out.println("The zoo is full!");
        }

    }
}

// Exercise 11
public void feed() {
    for (int i = 0; i < 10; i++) {
        park[i].mass *= 1.1;
    }
}

public String toString() {
    String result = "The list:\n";
    for (int i = 0; i< 10; i++) {
        result = result + "cage " + i + " status:" + park[i] + "\n"; 
    }
    return result;
}

public void print() {
    System.out.println(park.toString());
}

public int totalLegs() {
    int totalLeg = 0;
    for (int i = 0; i < 10; i++) {
        totalLeg += park[i].legs;
    }
    return totalLeg;
}
}

也是

代码语言:javascript
运行
复制
public class Animal {
float mass;
String name;
int legs;

// Exercise 6-6
public Animal(String randomName) {
    name = randomName;
    legs = 0;
    mass = 0;
}

// Exercise 6-7
public Animal(float one, String two, int three) {
    mass = one;
    name = two;
    legs = three;
}

//Exercise 7
public String toString(){
    return "name =" + name + "legs=" + legs + "mass=" + mass;
}

public void massSetter() {

}

public String getName() {
    return name;
}

public int getLegs() {
    return legs;
}
}

代码语言:javascript
运行
复制
public class TestZoo {
public static void main(String[] args){
    Zoo zoo = new Zoo();
    Animal elephant = new Animal(300f,"elephant",4);
    Animal spider = new Animal(0.5f,"spider",6);
    Animal snake = new Animal(10f,"snake",0);

    zoo.addAnimal(elephant);
    zoo.addAnimal(spider);
    zoo.addAnimal(snake);

    zoo.print();

    System.out.println("Average number of legs is");


}
}

从代码中您可能可以看出,我对编程非常陌生,当我运行最后一个类(TestZoo.java)时,它会给出以下错误。

代码语言:javascript
运行
复制
 Exception in thread "main" java.lang.NullPointerException
        at Zoo.addAnimal(Zoo.java:13)
        at TestZoo.main(TestZoo.java:9)

我做了一些搜索,很明显,当我试图传递一个空值时,会得到这个错误,好像它有什么东西一样。

我看了动物园课程的第13行,老实说,我不知道如何解决这个问题。

任何帮助都将不胜感激。

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2013-11-07 11:58:16

这就是问题所在:

代码语言:javascript
运行
复制
public Animal[] park;

public Zoo() {
    Animal[] park = new Animal[10];
}

您正在声明一个名为park的实例变量,但是在构造函数中,您不是为该实例变量分配一个值,而是创建一个名为park的局部变量,并为此分配一个值。将构造函数更改为:

代码语言:javascript
运行
复制
public Zoo() {
    park = new Animal[10];
}

或者您可以将声明更改为:

代码语言:javascript
运行
复制
public Animal[] park = new Animal[10];

并完全删除显式构造函数声明。

无论哪种方式,当您调用park时,实例变量addAnimal都是非空的。

此外,在addAnimal中,存在各种问题。首先,您将继续查看park,直到找到一个非空条目,而不是直到找到一个空条目.这是错误的方向。

我还会对代码进行其他一些修改(例如,将字段保持为私有),但希望这足以让您开始工作。

票数 6
EN

Stack Overflow用户

发布于 2013-11-07 11:58:22

在构造函数中

代码语言:javascript
运行
复制
public Zoo() {
    Animal[] park = new Animal[10];
}

您有影子公园,因此实例变量park从未初始化过。

这意味着您已经创建了与类变量具有相同名称的烦恼变量公园。

代码语言:javascript
运行
复制
public class Zoo {
public int j=0;
public Animal[] park; <--This park

    public Zoo() {
        Animal[] park = new Animal[10]; <--In not the same as this park
    }

要更正,只需停止在构造函数中创建一个新的公园,因此

代码语言:javascript
运行
复制
public class Zoo {
public int j=0;
public Animal[] park; <--This park

    public Zoo() {
        park = new Animal[10]; <--Now is the same as the other park
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19835301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档