Java 此nullPointerException的原因是什么?

Java 此nullPointerException的原因是什么?,java,arraylist,nullpointerexception,singleton,Java,Arraylist,Nullpointerexception,Singleton,当我运行测试线束时,我在线路上得到一个NullPointerException: if(flower.extractPollen(pol)){ 我很难解释。在我的测试装置中,我在花园的实例中添加了花,这些花上有花粉,这是我从println的花粉中可以分辨出来的。在我的测试工具中,我创建了一个花园实例,一只蜂王(在arraylist中)在蜂巢中,并在花园中添加了一朵玫瑰和一朵水仙花(在arraylist中)。然后,我在蜂箱和花园里又跑了一天,花园里的花又跑了一天(我可以从照片上看出正在向它们添加

当我运行测试线束时,我在线路上得到一个NullPointerException:

if(flower.extractPollen(pol)){
我很难解释。在我的测试装置中,我在花园的实例中添加了花,这些花上有花粉,这是我从println的花粉中可以分辨出来的。在我的测试工具中,我创建了一个花园实例,一只蜂王(在arraylist中)在蜂巢中,并在花园中添加了一朵玫瑰和一朵水仙花(在arraylist中)。然后,我在蜂箱和花园里又跑了一天,花园里的花又跑了一天(我可以从照片上看出正在向它们添加花粉),创造了更多的蜜蜂。当工蜂被创造出来时,它应该从花园的实例中获取一朵花并从中提取花粉,但我得到了一个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
}

您是否定义了findFlower方法?我没有看到任何代码。这可能有助于显示空指针的位置


您的
rand.nextInt(max)+1
应该是
rand.nextInt(max)
。通过添加1,数字可能等于花数组的大小,并且在
getFlower(fi)
方法中,如果fi>=花数组的大小,则返回
null

您是否定义了findFlower方法?我没有看到任何代码。这可能有助于显示空指针的位置


您的
rand.nextInt(max)+1
应该是
rand.nextInt(max)
。通过添加1,数字可能等于花数组的大小,并且在
getFlower(fi)
方法中,如果fi>=花数组的大小,则返回
null

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

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

注释更合适,但这是一个信誉问题

您的NullPointerException是因为“flower”为null。我没有看到findFlower方法在您的Garden类中的实现,但它可能没有找到您想要的花

…我看到您添加了findFlower方法的实现


检查随机整数生成器,确保它只返回有效数组索引的值。您还应该更改调用findFlower的代码以正确处理null返回,因为这是作为findFlower方法中可能的结果实现的。

注释更合适,但这是一个信誉问题

您的NullPointerException是因为“flower”为null。我没有看到findFlower方法在您的Garden类中的实现,但它可能没有找到您想要的花

…我看到您添加了findFlower方法的实现


检查随机整数生成器,确保它只返回有效数组索引的值。您还应该更改调用findFlower的代码以正确处理null返回,因为这是作为findFlower方法中可能的结果实现的。

NullPointerException是当您尝试使用指向内存中无位置(null)的引用并通过以下条件时发生的异常

如果(花提取花粉(pol)){


这里您得到的是null指针异常,因为flower变量是用null引用的,并且没有执行null指针检查,您正在尝试调用extractpolen(pol)方法。因此,在执行其他操作之前,请对任何对象变量执行null检查。

NullPointerException是指当您尝试使用指向内存中无位置(null)的引用并通过检查以下条件时发生的异常

如果(花提取花粉(pol)){


这里您得到的是null指针异常,因为flower变量是用null引用的,并且没有执行null指针检查,您正在尝试调用extractpolen(pol)方法。因此,在您执行其他操作之前,请对任何对象变量执行空检查。

您可以向我们显示空指针异常的堆栈跟踪吗?添加findFlower方法代码,并准备添加stacktrace
rand.nextInt(max)+1
-为什么出现
+1
?@OliCharlesworth-我认为我有这样做的原因,但当我删除它时,它消除了空指针异常!谢谢你-如果可以,我会将你的评论标记为正确的answser!!你能给我们看空指针异常的堆栈跟踪吗?添加findFlower方法代码并准备添加stacktrace
rand.nextInt(max)+1
-为什么
+1
?@OliCharlesworth-我认为我有这样的理由,但当我删除它时,它就消除了空指针异常!谢谢你-如果可以,我会将你的评论标记为正确的应答者!!
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)