2017-04-09 19 views
0

私はこの1D配列を2D配列に変換しようとしていますが、動作させることはできません。1D配列からJava2D配列へ

public static void main (String args [] ){ 
int [] scanned={1,2,3,4,5,6,7,8,9,10,11,12}; 

int row=4; 
int col=3; 

int[][] skydata=new int[row][col]; 

    for(int r=0; r<row; r++){ 

    for(int c=0; c<col; c++){ 

     for(int i=0; i<row*col; i++){ 
      skydata[r][c]=scanned[i]; 
     } 
    } 

} 


System.out.print(Arrays.deepToString(skydata)); 

これは次のように私の目標は、2Dアレイ出力するように、それをコピーすることである最後の要素[[12,12,12] [12,12,12]などの出力

を与えます[[1,2,3]、[6,5,4] [7,8,9]、[12,11,10]

だから私は間違っているのですか?

+0

私のために働くことになったforループ 'i'のポイントは何ですか? –

+0

http://stackoverflow.com/questions/5134555/how-to-convert-a-1d-array-to-2d-arrayの重複 –

+0

1Dの配列全体を反復処理しました。 – Cosmik11

答えて

1
public static void main (String args [] ){ 
int [] scanned={1,2,3,4,5,6,7,8,9,10,11,12}; 

int row=4; 
int col=3; 

int[][] skydata=new int[row][col]; 
int i = 0; 
    for(int r=0; r<row; r++){ 

    for(int c=0; c<col; c++){ 
      skydata[r][c]=scanned[i++]; 
    } 

} 


System.out.print(Arrays.deepToString(skydata)); 

これを試してください。各時間は再びすべての上から開始する変数iとして

for(int c=0; c<col; c++){ 
      skydata[r][c]=scanned[i++]; 
    } 

: 問題は、このforループしていました。 変数を紙に書き込もうとすると、2番目のforループで新しい繰り返しが繰り返されるたびに初期化されるため、1より大きくはないことがわかります。

+0

ようこそ、スタックオーバーフロー!このユーザーの問題を解決しているかもしれませんが、将来この問題に遭遇するユーザーにとってはコードオンリーの回答はあまり役に立ちません。あなたのコードが元の問題を解決する理由を説明するために、あなたの答えを編集してください。 –

+0

それは私のコードが間違っていたことが、ロジックを説明するのに気を使うでしょうか? – Cosmik11

+0

あなたが1D配列の最初の要素をスキップするようスキャンされたwouldntの中のi ++と言うことで – Cosmik11

-1
int k = 0; 

    for(int r = 0; r<row; r++) 
    { 
     if(r % 2 == 0){ 

     for(int c = 0; c< col; c++) 
     { 
      skydata=[r][c]=scanned[k]; 
      k++; 
     } 
    } 

     else { 

       for (int c=col-1; c>=0 c--) 
      { 
       skydata[r][c]=scanned[k]; 
      k++; 
     } 
    } 
} 

ネヴァーマインド私はこれを試してみましたが、それが

関連する問題