如何返回数组内的对象?

时间:2021-02-11 21:06:52

标签: java arrays object

我有一个大学的作业,我被一个问题困扰了很长时间。

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

(水果在另一个类中定义如下:水果(字符串名称,字符串昵称,整数味道)。)

这种方法首先是为了返回味道最好的水果。

但是我一直有针对口味或水果的 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());
    }
}

1 个答案:

答案 0 :(得分:0)

在代码中

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 方法中使用预期的对象状态。