我有一个大学的作业,我被一个问题困扰了很长时间。
因此,我必须首先在方法中返回一个名为 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());
}
}
答案 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
方法中使用预期的对象状态。