我一直在尝试将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();
}
}
答案 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)