当对象包含数组时,如何覆盖toString方法?

时间:2016-11-11 20:33:00

标签: java arrays double tostring

在我的main方法中,我需要打印出在第二个类中创建的两个对象。这是我的代码。

public String toString(){

        String z = "";
        for(int i = 0; i<data.length;i++){
            z = z + data[i] + ", ";
        }
        return z;
    }

我有一个Stat构造函数,它将数组数据设置为调用对象中调用的数组。

    public Stat(double[] d){
        double[] data = new double[d.length];
        this.data = data;

这是我初始化数据的方式

int i=1;
private double[] data = new double[i];

这是调用类

public static void main(String[] args){
double[] data = {1.0, 2.0, 3.0};
Stat statA = new Stat(data);

data[0] = 3.0;
data[1] = 4.0;
data[3] = 5.0;

Stat statB = new Stat(data);
System.out.println("statA data= " + statA.toString());
System.out.println("statB data= " + statB.toString());

当我运行调试器时,对象包含正确的数据值但是当我调用toString时,它们都打印{0.0,0.0,0.0}

3 个答案:

答案 0 :(得分:5)

这是你的问题:

 public Stat(double[] d){
        double[] data = new double[d.length];
        this.data = data;

您创建的数据数组是新的d.length size数组。 在Java中,新分配的内存默认填充为0,因此您可以在程序中将其打印出来。

更改该代码,e.x。:

public Stat(double[] d){
        this.data = d;

答案 1 :(得分:0)

我相信你的

public Stat(double[] d){ double[] data = new double[d.length]; this.data = data;

在创建输入数组大小(d.length)的新数组时导致问题,因此类中的数组不包含数据。你想要这样的东西:

public Stat(double[] d){ this.data = d }

答案 2 :(得分:0)

如果实例成员数据放错地方,您可以尝试使用Arrays.toString(statA)