簡體   English   中英

我如何避免java.lang.NullPointerException錯誤

[英]How can i avoid java.lang.NullPointerException error

我的代碼有問題。

首先,這是我的代碼。

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;
}
}

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;
}
}

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)時,出現以下錯誤。

 Exception in thread "main" java.lang.NullPointerException
        at Zoo.addAnimal(Zoo.java:13)
        at TestZoo.main(TestZoo.java:9)

我進行了一些搜索,當我嘗試傳遞null好像它包含某些東西時,顯然收到了此錯誤。

我查看了Zoo類的第13行,我誠實地不知道如何解決這個問題。

任何幫助將不勝感激。

提前致謝

這就是問題:

public Animal[] park;

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

您要聲明一個名為park實例變量-然后在構造函數中,而不是為該實例變量分配值,而是創建一個名為park局部變量並為其分配值。 將構造函數更改為:

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

或者,您可以將聲明更改為:

public Animal[] park = new Animal[10];

並完全刪除顯式構造函數聲明。

無論哪種方式,當您調用addAnimal時,實例變量park都將為非null。

此外,在addAnimal ,存在各種問題。 首先,您將繼續瀏覽park直到找到一個非null條目,而不是直到找到null條目為止……這是錯誤的方法。

我還會對代碼進行其他各種更改(例如,使字段保持私有),但是希望這足以使您開始工作。

在你的構造函數中

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

你有陰影公園 ,因此實例變量park永遠不會被初始化

這意味着您創建了另一個變量庫,該變量庫恰好與類變量同名

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
    }

要更正,只需停止在構造函數中創建一個新公園,因此

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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM