You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeHS中AP计算机科学Pinata类构造器null输出问题求助

解决Pinata类实例输出null值的问题

问题原因

当你创建sweetie实例时,调用的是仅初始化candy字段的构造器:new Pinata("sour straws")。此时color和shape字段未被赋值,Java中引用类型字段的默认值为null,所以toString()方法拼接字符串时会输出null。同理,接收colorType和shapePin的构造器也会导致candy字段为null(若使用该构造器创建实例)。

解决方案

有两种常用方法可以解决这个问题,核心是确保所有字段都被赋予有效值:

方法1:构造器间复用(调用无参构造)

让其他构造器先调用无参构造初始化所有字段,再覆盖需要自定义的部分,避免重复代码:

public class Pinata
{
    private String candy;  
    private String color;    
    private String shape;
    
    public Pinata()
    {
        candy = "hard candy";
        color = "rainbow";
        shape = "donkey";
    }
    
    public Pinata(String candyType, String colorType, String shapePin)
    {
        this(); // 先调用无参构造初始化所有字段
        candy = candyType;
        color = colorType;
        shape = shapePin;
    }
    
    public Pinata(String colorType, String shapePin)
    {
        this(); // 复用无参构造的默认candy值
        color = colorType;
        shape = shapePin;
    }
    
    public Pinata(String candyType)
    {
        this(); // 复用无参构造的默认color和shape值
        candy = candyType;
    }
    
    public String toString()
    {
        return color + " " + shape + " pinata filled with " + candy;
    }
}

方法2:给字段设置默认初始值

在声明字段时直接赋予默认值,这样无论调用哪个构造器,未被修改的字段都会使用默认值:

public class Pinata
{
    private String candy = "hard candy";  
    private String color = "rainbow";    
    private String shape = "donkey";
    
    public Pinata()
    {
        // 字段已初始化,无参构造可留空
    }
    
    public Pinata(String candyType, String colorType, String shapePin)
    {
        candy = candyType;
        color = colorType;
        shape = shapePin;
    }
    
    public Pinata(String colorType, String shapePin)
    {
        color = colorType;
        shape = shapePin;
    }
    
    public Pinata(String candyType)
    {
        candy = candyType;
    }
    
    public String toString()
    {
        return color + " " + shape + " pinata filled with " + candy;
    }
}

修改后测试结果

运行PinataTester类,输出将变为:

rainbow donkey pinata filled with hard candy
blue star pinata filled with chocolate
rainbow donkey pinata filled with sour straws

内容的提问来源于stack exchange,提问作者Hannah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:47:44