2016-05-01 12 views
0

私は2次元配列の列を1次元配列にコピーしようとしていました。私が作成したStockクラスには、dataというdouble []配列があります。最後のループは、最初のStockオブジェクト内にあるべきいくつかの値を印刷しようとしますが、実際には最後のオブジェクトからの値を出力します。実際に2D配列からオブジェクト1D配列への列のコピー

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); 

、Iループ印刷ARR [J] .dataの場合は[i]が、それはすべてのjについて同じ値を出力します。ループは、各Stockに対して同じ値を持つすべてのオブジェクトを作成しているようですが、そうする理由はありません。

2D配列の変動とすべての値が順番に確認されました。私は位置0の値が無関係なので、位置1でループを開始します。また、temp []の値を個別に印刷してみましたが、それらは正しくありましたが、依然としてオブジェクトのデータが間違っていました。

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

問題は、あなたの一時配列を定義したとある。

はここ(簡潔にするためにgetMean/getDev方法を省略)在庫オブジェクトです。新しい一時が使用されるすべてのARR要素について

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); 

この方法は:あなたが最初のforループ内でそれを行う必要があります。現在、同じのテンポラリオブジェクトを使用しています。値はのアルファの値と同様に更新されています。 また、最後のforループの条件をi<numrows-iに変更しました。あなたがなぜ必要なのか分からないi<numrows/20 =)

勉強して幸運を祈る!

+0

ご返信ありがとうございます。私はループ内でtempを宣言しようとしましたが、同じ出力を得ています。また、これらのループを実行する前にStockオブジェクトを初期化しようとしましたが、どちらも機能しませんでした。 最後のループでは、私は20で割っていましたので、いくつかの値しか表示されませんでした。そうでなければ、すべての値が印刷されるのを待っていました。もう一度ありがとうございます –

+0

これは奇妙なことです...ループの中で「temp」と宣言しようとしましたか?もし出力が同じでなければならない場合、問題は 'Stock'変数になるでしょう...' temp'型変数と 'Stock'型変数の両方をループ内で定義する必要があります。 スニペットをコードにコピーして貼り付け、正常に動作しているかどうかを確認しますか? – Victor

+0

あなたのコードを貼り付けてコピーしようとしたところ、それはうまくいかなかったのに、同じ出力が得られました。 Stockオブジェクトのコードを追加しましたが、それは間違っていると思います。 –

0

これは恥ずかしいですが、どういうことが間違っているのかが分かりました。私のオブジェクトクラスでは、私は静的変数を持っていました!それを取り除くことで解決しました。

関連する問題