1x6である入力1d配列を取得し、それを(3x2)である2d配列に戻したいと思います。私はそれを理解したと思いますが、私のコードではこのエラー配列が必要になり続けていますが、intが見つかりました。これは、入力配列が2Dではなく1D配列であるためだと思いますが、よくわかりません。誰かが私がこれを修正するのを手伝ってもらえますか?
例:
int [] d = {4、1、20、45、2、31};
2D配列を返す(3x2)
出力:
4 1
20 45
2 31
エラー:
transmo[j][i] = d[i][j];
|
array required, but int found
以下の私のコード:
public class mypractice
{
public void a_three_by_two(int[] d){
int transmo[][] = new int[3][2];
for (int i = 0; i < 1; i++) {
for (int j = 0; j < 6; j++)
{
transmo[j][i] = d[i][j];
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++)
{
System.out.print(transmo[i][j]+"\t");
}
System.out.println();
}
}
}
1D配列を繰り返し、モジュラスと剰余を使用して2D出力配列にインデックスを付けます。
public int[][] a_three_by_two(int[] d, int nrow, int ncol) { int transmo[][] = new int[nrow][ncol]; for (int i=0; i < d.length; ++i) { int row = i / ncol; int col = i % ncol; transmo[row][col] = d[i]; } return transmo; } int[] d = {4, 1, 20, 45, 2, 31}; int[][] output = a_three_by_two(d, 2, 3); System.out.println(Arrays.deepToString(output));
これは印刷します:
[[4, 1], [20, 45], [2, 31]]
ここでのロジックは、入力1D配列に沿った2ステップごとに、行インデックスを1ずつ増やし、2で割った後の余りに基づいて列インデックスを増やすというものです。
このバージョンのコードは柔軟性があり、どれか次元2D配列。
d []は1d配列であるため、d [index]を使用してアクセスする必要があります。ここであなたがする必要があるのは、tansmoのインデックスとdのインデックスの間の関係を解決することです
i = 0 j = 0 =>d [インデックス]インデックス= 0
i = 0 j = 1 =>d [インデックス]インデックス= 1
i = 1 j = 0 =>d [インデックス]インデックス= 2
i = 1 j = 1 =>d [インデックス]インデックス= 3
i = 2 j = 0 =>d [インデックス]インデックス= 4
i = 2 j = 1 =>d [インデックス]インデックス= 5
2 * i + j =インデックス
したがって、ループは次のようになります。
for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++){ transmo[i][j] = d[2*i+j]; } }
最初のループのセットは、2番目のループのセットと同じである必要があります。そうでない場合。
transmo[i][j]
失敗します。次に、計算するへのインデックス
d
。