我正在尝试创建一个数组的实例变量。我有很多方法可以产生关于数组的某些统计信息。我想知道是否有人可以向我解释我是否以正确的方式解决这个问题。我对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());
答案 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);