2

コードに問題があります。

まず、ここに私のコードがあります。

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 行目を調べましたが、正直なところ、これを修正する方法がわかりません。

どんな助けでも大歓迎です。

前もって感謝します

4

2 に答える 2

6

これが問題です:

public Animal[] park;

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

というインスタンス変数を宣言していますparkが、コンストラクターでは、そのインスタンス変数に値を割り当てる代わりに、というローカル変数を作成し、parkそれに値を割り当てています。コンストラクターを次のように変更します。

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

または、宣言を次のように変更できます。

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

明示的なコンストラクタ宣言を完全に削除します。

いずれにせよ、インスタンス変数parkは を呼び出すと非 null になりますaddAnimal

さらに、 内addAnimalには、さまざまな問題があります。まず、nullエントリが見つかるまでではなく、null 以外のエントリparkが見つかるまで調べ続けます...これは間違った方法です。

コードについて変更したい点は他にもたくさんありますが (たとえば、フィールドを非公開にするなど)、うまくいけば、これで十分です。

于 2013-11-07T11:58:16.643 に答える
1

コンストラクタ内

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

インスタンス変数 park が初期化されないため、 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
    }
于 2013-11-07T11:58:22.177 に答える