带数组的实例变量

时间:2014-04-06 23:44:48

标签: java arrays methods

我正在尝试创建一个数组的实例变量。我有很多方法可以产生关于数组的某些统计信息。我想知道是否有人可以向我解释我是否以正确的方式解决这个问题。我对Java很新,所以非常感谢任何指针。 当我运行程序时,我得到错误,比如Null。我现在不想修复这些错误,我只是想知道我是否正确地解决这个问题。

我的数据类:

   import java.util.Arrays;
   public class Stat {

private double data[];

public Stat()
{
    data = new double[1];
    data[0]= 0.0;
}

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

}

public double[] getData()
{
    return data;

}

public void setData(double[] d)
{

}

主要方法:

  double[] data = {1,2,2,3,4,5};
    Stat stat1 = new Stat(data);

    System.out.println(stat1.getData());

    System.out.println("stat1 data = " + stat1.toString()); 
    System.out.println("stat1 min = " + stat1.min()); 
    System.out.println("stat1 max = " + stat1.max()); 
    System.out.println("stat1 average = " + stat1.average()); 
    System.out.println("stat1 mode = " + stat1.mode()); 
    System.out.println("stat1 data = " + stat1.toString());

2 个答案:

答案 0 :(得分:1)

这个构造函数并没有真正做任何事情。您在d中传入一个数组,然后在您说d时将new分配给另一个数组,此外,d仅存在于堆栈上,直到该方法返回。每当使用此构造函数时,data永远不会被初始化,而且您的错误来自哪里。

变化:

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

这样的事情:

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

这是我在电脑上运行的内容:

public class Stat {

    private double data[];

    public Stat()
    {
        data = new double[1];
        data[0]= 0.0;
    }

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

    }

    public double[] getData()
    {
        return data;

    }

}

public class JavaTest {

    public static void main(String[] args) {

        double[] data = {1,2,2,3,4,5};
        Stat stat1 = new Stat(data);

        System.out.println(stat1.getData()[0]);  //outputs 1.0

    }
}

答案 1 :(得分:0)

将构造函数更改为

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

因为使用new关键字,您正在创建一个新的空数组。第二个错误,您无法直接打印数组。您必须使用for循环逐个打印其元素。 但是,我建议你覆盖toString()方法

@Override
public String toString(){
    return Arrays.toString(data);
}

然后打印您的类将输出数组的内容

System.out.println("stat1 data = " + stat1);