首页 > 解决方案 > 如何返回数组中的对象?

问题描述

我有一个大学的任务,我被一个问题困扰了很长一段时间。

所以,我必须首先在方法中返回一个名为 Fruit 的对象(这是我需要帮助的方法)。

(水果在另一个类中定义,如下所示:水果(字符串名称,字符串昵称,int taste)。)

该方法首先是为了返回具有最佳味道的水果。

但是我一直有 NullPointerException 用于口味或水果。我确实理解错误的含义,但我不知道如何纠正它。感谢那些可以提供帮助的人!对糟糕的英语感到抱歉。

public class Four {
    private Fruit[] fruits;
    Four(Fruit f1, Fruit f2, Fruit f3, Fruit f4) {
        Fruit[] m = new Fruit[4];
        m[0] = f1;
        m[1] = f2;
        m[2] = f3;
        m[3] = f4;
    }

    public Fruit[] getFruit() {
        return fruits;
    }

    public Fruit first() { //THIS FIRST LINE CAN'T CHANGE
        Fruit[] e = new Fruit[4];
        Fruit f = e[0];
        for (int i = 1; i < 3; i++) {
            if (f.taste > e[i].taste) {
                f = e[i];
            }
        }
        return f;
    }

    public static void main(String[] args) {
        Fruit f1 = new Fruit("Apple", "Appie", 5);
        Fruit f2 = new Fruit("Strawberry", "Strawy", 20);
        Fruit f3 = new Fruit("Banana", "Banie", 18);
        Fruit f4 = new Fruit("Orange", "Orangi", 8);
        Four m = new Four(f1, f2, f3, f4);
        System.out.println(m.first());
    }
}

标签: javaarraysobject

解决方案


在代码中

Fruit [] e = new Fruit[4];
Fruit f = e[0];

访问的数组索引e[0]有一个null值。所以f.taste > e[i].taste会抛出NPE。(任何人e[i].都会抛出 NPE)

建议的更改

构造函数

Fruit [] m = new Fruit[4];.

这必须更改为fruits = new Fruit[4];(并且所有分配m[]都应更改为fruits[]

这将有助于同一对象的其他部分可以访问这些构造的值。

否则,fruits实例变量将null不会跟踪对象的状态。

第一种方法

Fruit [] e = new Fruit[4];

对构造函数进行必要的更改后,可以将上面的行更改为Fruit [] e = this.fruits;(或直接访问fruits[]而不是分配给e)。

这将确保在first方法中使用预期的对象状态。


推荐阅读