首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化对象数组

初始化对象数组
EN

Stack Overflow用户
提问于 2022-04-07 06:07:41
回答 2查看 36关注 0票数 0

我有三门课:饮食,dietTest和weeklyDiet

这是我的饮食守则:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-07 06:20:54

您正在初始化只存在于retrieveDietRecord中的数组

代码语言:javascript
复制
    public void retrieveDietRecord(Diet[] d)
    {
        Diet [] onDiet = d;
    }

Diet [] onDiet = d; --这不是WeeklyDiet中的实例变量onDiet,而是一个局部变量,其作用域仅在方法中。如果要初始化实例变量,则必须这样做:

代码语言:javascript
复制
public void retrieveDietRecord(Diet[] d) {
   this.onDiet = d;
}

在这种情况下,关键字this并不是强制性的,但是明确显示并不是一个坏主意。

票数 1
EN

Stack Overflow用户

发布于 2022-04-07 06:37:16

代码语言:javascript
复制
public void retrieveDietRecord(Diet[] d) {
   this.onDiet = d;
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71777132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档