當我運行我的測試工具,我上線得到一個NullPointerException異常:這個nullPointerException的原因是什麼?
if(flower.extractPollen(pol)){
一種我竭力解釋。在我的測試工具中,我正在爲花園的實例添加鮮花,並且根據println的說明,花朵上有花粉。在我的測試工具中,我創建了一個花園實例,一個蜂羣中的蜂王(在一個數組列表中),並在花園中添加了一朵玫瑰和一個水仙花(在一個數組列表中)。然後,我又花了一天的時間在蜂房和花園裏花了一天的時間在花園裏的花朵上(我可以告訴他們添加花粉是從println發生的)並創造更多的蜜蜂。當工蜂被創建時,它應該從花園的實例中獲取一朵花,並從中提取花粉,但是我得到一個NullPointerException。相關代碼:
public class Worker{
public Bee anotherDay(){
for(int u = 0; u< 2; u++){
Flower flower = Garden.getInstance().findFlower();
for(int pol = 5; pol>0; pol--){
if(flower.extractPollen(pol)){
if(pol>1){
hive.addRoyalJelly(1);
pol = pol - 2;
hive.addHoney(pol);
}
break;
}
}//code omitted which returns the bee in this method and some other methods from the class
}
}
public class Garden{
private ArrayList<Flower> flowerbed = new ArrayList<Flower>();
Hive hive = null;
private static Garden instance;
private Garden(){}
public static Garden getInstance(){
if(instance == null){
instance = new Garden();
}
return instance;
}
public void anotherDay(){
int size = flowerbed.size();
for(int i = 0; i < size; i++) {
Flower flower = flowerbed.get(i);
System.out.println(flower);
flower.grow();
}
}
public Flower getFlower(int fi){
if(fi < flowerbed.size()){
return flowerbed.get(fi);
}else{
return null;
}
}
public Integer getRandomInteger(Integer max)
{
Random rand = new Random();
int number;
number = rand.nextInt(max) + 1;
return new Integer(number);
}
public Flower findFlower(){
return getFlower(getRandomInteger(flowerbed.size()));
}
}
public abstract class Flower{
public boolean extractPollen(int po){
if(po <= pollen){
pollen= pollen - po;
return true;
}return false;
}
//subclasses are not abstract and in their grow methods pollen is added. Some other methods omitted
}
通過圍繞我的代碼使用System.out.println()我可以看到,我用的是由當時的工人加入了玫瑰和adoffodil花園的實例和代碼蜜蜂創建(第14天),他們分別有28和42個花粉。由於工作人員只是試圖提取5我不明白爲什麼我得到這個異常!堆棧跟蹤:
Exception in thread "main" java.lang.NullPointerException
at Worker.anotherDay(Worker.java:21)
at Hive.anotherDay(Hive.java:105)
at TestBasicHive.testpart5(TestBasicHive.java:405)
at TestBasicHive.main(TestBasicHive.java:14)
你能向我們展示空指針異常的堆棧跟蹤嗎? – Kyle
加入findFlower方法代碼,並且將添加堆棧跟蹤 – user2973447
'rand.nextInt(max)+ 1' - 爲什麼'+ 1'? –