Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当对象包含数组时,如何重写toString方法?_Java_Arrays_Double_Tostring - Fatal编程技术网

Java 当对象包含数组时,如何重写toString方法?

Java 当对象包含数组时,如何重写toString方法?,java,arrays,double,tostring,Java,Arrays,Double,Tostring,在我的main方法中,我需要打印出在第二个类中创建的两个对象。这是我的密码 public String toString(){ String z = ""; for(int i = 0; i<data.length;i++){ z = z + data[i] + ", "; } return z; } 这就是我初始化数据的方式 int i=1; private double[] data =

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

public String toString(){

        String z = "";
        for(int i = 0; i<data.length;i++){
            z = z + data[i] + ", ";
        }
        return z;
    }
这就是我初始化数据的方式

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}

我相信

public Stat(双[]d){
双精度[]数据=新的双精度[d.长度];
this.data=data;

在创建输入数组大小(
d.length
)的新数组时导致问题,因此类中的数组不包含数据。您需要类似以下内容:

public Stat(双[]d){
这个数据=d

}

如果实例成员数据放错了位置,可以尝试使用
数组.toString(statA)

这里是您的问题:

 public Stat(double[] d){
        double[] data = new double[d.length];
        this.data = data;
创建的数据数组是新的d.length大小数组。 在Java中,新分配的内存默认用0填充,所以这就是为什么在程序中打印这个

更改该代码,例如:

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

为什么您认为问题出在
toString
上?仅供参考:您可以将
toString()
缩短为
返回字符串。join(“,”,data);
如果
data
列表
(可以很容易地制作成列表)。这基本上是正确的。但是,
This.data
将是对
d
的引用,而不是一个单独的数组,因此在
statA
构造函数之后更改内容时,
statA.data
将被更改。使用单独的数组来构造
statA
statB
,显然可以避免这种情况,但是最好使用
this.data=Arrays.copyOf(d,d.length)
以防万一。@jonhopkins-没错,但正如您在代码中看到的,author三次希望更改数组元素的值。复制数组显然会阻止这种情况发生,因为有各种引用。但这就是author想要的吗?当然,更改两个对象中的数据是OP想要和期望的s、 在这种情况下,代码可以保持原样(当然使用您的更改).但我想不出有多少情况需要这样做,所以我留下了我的第一条评论,作为对实际情况的说明,如果这不是OP想要的,那么它可能会避免以后的另一个问题,即为什么
statA
statB
打印相同的东西。
public Stat(double[] d){
        this.data = d;