将二维数组中的列复制到对象一维数组中

时间:2016-05-01 12:30:09

标签: java object multidimensional-array

我一直在尝试将2D数组的列复制到一维数组中。我创建的Stock类有一个名为data的double []数组。最后一个循环尝试打印应该在第一个Stock对象中的某些值,但它实际上会打印最后一个对象的值。

Stock arr[] = new Stock[numcols];   // creates array with the same n of slots as columns
        double[] temp = new double[numrows-1];

        for(int i=1; i<numcols; i++){
            for(int j=1; j<numrows; j++){
                temp[j-1] = fluct[j][i];
            }
            arr[i-1] = new Stock(temp, compName[i-1], price[i-1]);
        }
        for(int i=0; i<numrows/20; i++)
            System.out.println(arr[0].data[i] + arr[0].name);

实际上,如果我循环打印arr [j] .data [i],它将为所有j打印相同的值。似乎循环正在为每个股票创建具有相同值的所有对象,但我认为没有理由这样做。

我已经检查了2D数组波动,并且所有值都按顺序排列。我在位置1开始循环,因为位置0中的值没有意义。还尝试单独打印temp []的值,它们是正确的,但对象中的数据仍然是错误的。

这是Stock对象(为简洁起见省略了getMean / getDev方法):

public class Stock{
    public static double[] data;
    public static String name;
    public static double stDev;
    public static double price;
    public static double mean;

    public Stock(double[] newData, String newName, double newPrice){
        this.data = newData;
        this.name = newName;
        this.price = newPrice;
        this.mean = getMean();
        this.stDev = getDev();
    }
}

2 个答案:

答案 0 :(得分:0)

问题在于您定义了 temp 数组。你应该在第一个for循环中进行:

Stock arr[] = new Stock[numcols];   // creates array with the same n of slots as columns

for(int i=1; i<numcols; i++){
    double[] temp = new double[numrows-1];
    for(int j=1; j<numrows; j++){
        temp[j-1] = fluct[j][i];
    }
    arr[i-1] = new Stock(temp, compName[i-1], price[i-1]);
}
for(int i=0; i<numrows-1; i++)
    System.out.println(arr[0].data[i] + arr[0].name);

这样,对于每个 arr 元素,都将使用新的temp。目前,您正在使用相同的 temp 对象,并且正在更新其值以及 arr 元素的值。 此外,我已经将最后一个for循环的条件更改为i<numrows-i。不知道你为什么需要i<numrows/20 =)

祝你学习Java好运!

答案 1 :(得分:0)

嗯,这很尴尬,但我终于弄清楚出了什么问题。在我的对象类中,我的变量是静态的!删除它解决了它。