gpt4 book ai didi

java - 这个nullPointerException的原因是什么?

转载 作者:行者123 更新时间:2023-12-01 17:18:17 26 4
gpt4 key购买 nike

当我运行测试工具时,我收到一个 NullPointerException:

if(flower.extractPollen(pol)){

我正在努力解释这一点。在我的测试工具中,我正在向我的花园实例添加花朵,据我从 println 可以看出,这些花朵有花粉。在我的测试工具中,我正在创建一个花园的实例, hive 中的一只蜂王(在数组列表中),并向花园添加一朵玫瑰和一朵水仙花(在数组列表中)。然后我又在 hive 和花园上跑了一天,花园又在花园里的花上跑了一天(向它们添加花粉,我可以看出这是从 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(),我可以看到我使用的代码正在向花园的实例添加一朵玫瑰和阿朵花,并且在创建工蜂时(第 14 天) )它们分别有 28 和 42 个花粉。由于 Worker 仅尝试提取 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)

最佳答案

我猜你的 getFlower 方法返回 null 因为 fi 大于flowerbed.size();不要在那里返回 null,而是抛出异常并看看会发生什么。正是因为这个原因,抛出异常通常优于返回 null。

关于java - 这个nullPointerException的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20509127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com