java - 如何返回数组中的对象?
问题描述
我有一个大学的任务,我被一个问题困扰了很长一段时间。
所以,我必须首先在方法中返回一个名为 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());
}
}
解决方案
在代码中
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
方法中使用预期的对象状态。
推荐阅读
- java - System.out.print 移除 Matcher 类异常
- firebase - Firebase CLI 在部署功能时不起作用。错误:HTTP 错误:404,找不到方法
- xaml - 如何在 Xaml 中更改 ListView 的背景颜色?
- xcode - GameObject.Find 在 Xcode 中返回空值,但在 Unity3D 中不返回
- java - Java Swing 启动画面配置错误
- wordpress - 使用 Woocommerce 和 Siteground 进行分期
- javascript - 为什么最后没有使用console.log在控制台中显示以下方法?
- python - 优化 NumPy 数组内存占用的模块/方法
- react-native - 如何深层链接以打开默认电话应用程序以响应本机呼叫一个人
- javascript - 服务人员 notificationclick 事件没有聚焦或在选项卡中打开我的网站