[英]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.