2016-11-16 2 views
1

受信配列を単一の2次元配列として格納する必要があります。配列がメソッドによって渡されたときに配列データを2次元配列に格納する

public class Question { 

    static int row = 5; 
    static int column = 3; 
    static int[][] processedArrayData; 

    public static void processArrays(int[] incoming) { 
     processedArrayData = new int[column][row]; 

     /* 
     * Need to store each incoming array as 
     * a single two dimensional array 
     */ 

     // This attempt gives me invalid data See "Invalid Example Output 1" 
      for (int i = 0; i < column; i++) { 
       for (int j = 0; j < row; j++) { 
        processedArrayData[i][j] = incoming[i]; 
       } 
      } 
      for (int[] arr : processedArrayData) { 
       System.out.println(Arrays.toString(arr)); 
      } 




    } 

    public static void main(String[] args) { 
     int[] array1 = {7, 7, 1, 3, 3}; 
     int[] array2 = {9, 7, 0, 3, 8}; 
     int[] array3 = {6, 6, 1, 3, 2}; 

     processArrays(array1); 
     processArrays(array2); 
     processArrays(array3); 
    } 

} 

無効な出力例1

[7, 7, 7, 7, 7] 
[7, 7, 7, 7, 7] 
[1, 1, 1, 1, 1] 
[9, 9, 9, 9, 9] 
[7, 7, 7, 7, 7] 
[0, 0, 0, 0, 0] 
[6, 6, 6, 6, 6] 
[6, 6, 6, 6, 6] 
[1, 1, 1, 1, 1] 

私はエラーでこれを実行しようとするすべての試み。私は、2d配列に配列を格納する伝統的な方法を試していると仮定しており、すべての配列情報は既知であり、手近にアクセス可能です。私がそうしようとすると、一度に1つの配列を呼び出すだけで、それを動作させることはできません。

+0

おそらく、2次元配列を初期化していないためです。 – XtremeBaumer

+0

エラーは何ですか?配列を格納するコードはどこですか? – Mena

答えて

2

質問クラスのインスタンスを作成するか、変数を静的にする必要があります。

static int[][] processedArrayData = new int[3][]; 
static int idx = 0; 

public static void processArrays(int[] incoming) { 
    processedArrayData[ idx++ ] = incoming; 
} 
+0

インクリメント演算子をうまくコンパクトに使用する+1 –

+0

ありがとう。これはまさに私が必要としていたものです。とても有難い。 –

3

あなたのprocessArray()メソッドでは、入力配列を使用して2次元配列に新しい行を追加するだけです。次に、2D配列のインデックスを維持して、現在の位置を把握します。

public class Question { 

    private static int[][] processedArrayData; 
    private static int index = 0; 

    public static void processArrays(int[] incoming) { 
     //for (int i=0; i < incoming.length; ++i) { 
     // processedArrayData[index][i] = incoming[i]; 
     //} 
     // edit by @FelixNovovic 
     processedArrayData[index] = incoming 

     ++index; 
    } 

    public static void main(String[] args) { 
     int[] array1 = {7, 7, 1, 3, 3}; 
     int[] array2 = {9, 7, 0, 3, 8}; 
     int[] array3 = {6, 6, 1, 3, 2}; 
     processedArrayData = new int[3][5]; 

     processArrays(array1); 
     processArrays(array2); 
     processArrays(array3); 
    } 
} 
+0

processedArrayDataは静的であるか、新しいQuestionインスタンスを作成する必要があります。 –

+0

コードをコンパイルするには、processedArrayDataおよびindexを静的にする必要があります。さらに、forループは必要ありません。入力アレイをindexの位置に割り当てるだけです(processedArrayData [index] = incoming) –

+0

ありがとうございました。私は時間と労力を感謝します。 –

関連する問題