0

Javaで1次元配列を2次元配列に分割する方法を知りたいですか? 私はそれらの両方をセットアップする方法を知っており、for ループを使用して両方を反復処理する必要があることを知っています。私は学生の名前の配列を持っており、5 人の学生のグループを作成するために、最初の 5 人を 2 次元配列の一番上の行に配置し、次の 5 人を一番下の行に配置したいと考えています。

これまでのところ、私は持っています:

public void main(String[] args)

{

  for (int x=0; x<5;x++)
  {
      for (int y=0; y<5;y++)
      {
          board[x][y] = (letters)y;
          System.out.print(board[x][y]);
          System.out.print("");
      }
  }
 }

これをアレイに接続したいことを伝える方法

4

3 に答える 3

0

このコードを詳しく見てください。1D配列に5で割り切れない要素が多数ある場合でも、インデックスが計算されます。

String[] names = new String[104];
double size = names.length;

String[][] yetAnother = new String[(int) Math.ceil(size / 5)][5];

for (int i = 0; i < size; i++)
    yetAnother[(int) Math.ceil(i / 5)][i % 5] = names[i];
于 2012-10-24T13:20:41.770 に答える
0

したがって、あなたの唯一の問題はlettersインデックスの計算であるように思えます。これを試して:

for (int x = 0; x < 2; x++) {
    for (int y = 0; y < 5; y++) {
        board[x][y] = letters[x * 5 + y];
        System.out.print(board[x][y]);
        System.out.print("");
    }
}

これにより、それぞれ 5 人の生徒の 2 つの「行」が作成されます。

于 2012-10-24T13:17:36.203 に答える
0

2 次元配列を 5x(生徒数 / 5) またはグループあたりの人数を生徒数 / グループあたりの人数 /* グループ数 */ にすることができるので、より動的になります。

これを達成するために必要なループは 1 つだけです。ループは 1 次元配列の各名前を通過し、名前を 1 つずつ取得して、2 次元配列の適切なインデックスに割り当てます。

インデックスを把握するために、そのうちの 1 つはグループごとの mod(%) 人の単なるカウンターである可能性があります。これにより、インデックスは 0 から 4 の間で維持されます。他のインデックスを把握するには、ループ カウンターを (生徒数/グループあたりの人数)

board[i%ppg][i%nog]したがって、 ppg はグループごとの人数であり、nog はグループの数のように見えます。グループの数を簡単に計算できます。

編集: 2 次元配列を視覚化する非常に簡単な方法があれば、2 次元配列は簡単です。私が 2 次元配列を学んでいたときのトリックは、2 次元配列をチェス盤と考えることでした。チェス盤は、プログラミングでは単なる数字であることを除いて、2次元配列と同じように文字と数字で表される垂直方向と水平方向のインデックスを持っています。

于 2012-10-24T13:31:17.600 に答える