繁体   English   中英

将列从2D数组复制到对象1D数组

[英]Copying columns from 2D array into object 1D array

我一直在尝试将2D数组的列复制到1D数组中。 我创建的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();
    }
}

问题在于您是否定义了临时数组。 您应该在第一个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元素使用新的温度。 当前,您正在使用相同的临时对象,并且它的值以及arr元素的值都正在更新。 另外,我已将条件更改为i<numrows-i的最后一个for循环。 不知道为什么你需要i<numrows/20 =)

Java学习祝您好运!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM