我有三门课:饮食,dietTest和weeklyDiet
这是我的饮食守则:
public class Diet
{
private double weight;
private double calorie;
public double getW()
{
return weight;
}
public double getC()
{
return calorie;
}
public void setW(double w)
{
weight = w;
}
public void setC(double c)
{
calorie = c;
}
public Diet(double w, double c)
{
setW(w);
setC(c);
}
}这是我的weeklyDiet代码:
public class WeeklyDiet
{
private Diet [] onDiet;
public void retrieveDietRecord(Diet[] d)
{
Diet [] onDiet = d;
}
public double highestCalorieIntake()
{
double highest = onDiet[0].getC();
for(Diet calories : onDiet)
{
if(calories.getC() > highest)
{
highest = calories.getC();
}
}
return highest;
}
public double averageWeight()
{
double total = 0;
for(int i = 0 ; i < onDiet.length ; i++)
{
total += onDiet[i].getW();
}
return total / 2;
}
}这是我的dietTest代码:
public class DietTest
{
public static void main(String [] args)
{
Diet d1 = new Diet(56.8, 1500);
Diet d2 = new Diet(59.1, 1850.5);
Diet [] myDiet = new Diet[2];
myDiet[0] = d1;
myDiet[1] = d2;
WeeklyDiet w = new WeeklyDiet();
w.retrieveDietRecord(myDiet);
w.averageWeight();
}
}通过运行这段代码,似乎没有初始化WeeklyDiet中的Diet,因为getAverage和findHighest方法不能使用数组中的数据。我想问为什么当我执行w.averageWeight()方法时,系统会显示nullPointerException。
发布于 2022-04-07 06:20:54
您正在初始化只存在于retrieveDietRecord中的数组
public void retrieveDietRecord(Diet[] d)
{
Diet [] onDiet = d;
}Diet [] onDiet = d; --这不是WeeklyDiet中的实例变量onDiet,而是一个局部变量,其作用域仅在方法中。如果要初始化实例变量,则必须这样做:
public void retrieveDietRecord(Diet[] d) {
this.onDiet = d;
}在这种情况下,关键字this并不是强制性的,但是明确显示并不是一个坏主意。
发布于 2022-04-07 06:37:16
public void retrieveDietRecord(Diet[] d) {
this.onDiet = d;
}https://stackoverflow.com/questions/71777132
复制相似问题