0
public void setData(double[] d) {
    if (d == null) {
        data = new double[0];
    } else {
        data = new double[d.length];
        for (int i = 0; i < d.length; i++)
            data[i] = d[i];
    }
}

我的代码中的这个方法用于设置数组的数据。我还需要编写一个名为 reset() 的方法,它将给定的数组更改为空值。此外,我们正在这个实验室中练习超载。setData() 有四个版本(double、int、float、long)。由于 Stat 类在内部使用双精度数组来存储值,我只需要创建一个双精度类型的 reset() 方法吗?(我想我只需要一个......)最后,请给我一些提示进行此重置业务,因为我尝试过的所有事情都惨遭失败,并且通常包含诸如“setData(double [] null)”之类的返回错误的语句。

4

3 回答 3

1

java中的一切都是按传递的;甚至引用也是按值传递的。所以通过一个方法传递一个数组,可以改变数组的内容,但不能改变数组指向的内容。现在,如果您在一个类中并且碰巧传递了一个由于在该类中而已经可以访问的实例成员,那么您将能够将数组设置为null.

如果您总是希望能够更改数组指向的内容,那么只需拥有一个返回数组(而不是 be void)的函数,并将返回的值分配给感兴趣的数组。

于 2013-11-09T23:45:22.933 回答
0

因为 java 是按值传递的,所以您不能将作为参数传递的变量重新分配给方法,并期望看到该更改反映在外部。

您可以做的是将数组放入某种包装类中,如下所示:

class ArrayReference<T> {
  T[] array; // T would be either Double, or Long, or Integer, or whatever
}

接着:

void setData(ArrayReference<Double> myReference) {
  myReference.array = null;
}
于 2013-11-09T23:46:12.797 回答
0

我不确定我是否理解你的问题,但这是你想要的吗?

public class Stat {
    private double[] data;

    public void reset() {
        data = null;
    }

    public void setData(double[] d) {
        data = (d == null) ? new double[0] : Arrays.copyOf(d, d.length);
    }
}
于 2013-11-09T23:49:02.803 回答