簡體   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