Преобразование ArrayList в 2D массив - PullRequest
0 голосов
/ 27 февраля 2012

После выяснения способа создания списка случайных чисел от 1 до 16, как я могу отобразить этот список в матричной форме.

 public static void main(String... args) throws Exception {

 List<Integer> list = new ArrayList<Integer>();
 for (int i = 1; i < 17; i++) {
    list.add(i);
}
System.out.println(list); //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Collections.shuffle(list);
System.out.println(list); //[11, 5, 10, 9, 7, 0, 6, 1, 3, 14, 2, 4, 15, 13, 12, 8]

int[][] a2 = new int[4][4];
for (int i = 0; i < 4; i++) {
    for (int j = 0;  j< 4; j++) {


        a2[i][j] = list.get(i*4 + j);
      //  System.out.println(Arrays.deepToString(a2)); //[[11, 5, 10, 9], [7, 0, 6, 1],     [3, 14, 2, 4], [15, 13, 12, 8]]
    }
   System.out.println(Arrays.deepToString(a2)); //[[11, 5, 10, 9], [7, 0, 6, 1], [3,     14, 2, 4], [15, 13, 12, 8]]
}
//System.out.println(Arrays.deepToString(a2)); //[[11, 5, 10, 9], [7, 0, 6, 1], [3, 14                  2, 4], [15, 13, 12, 8]]
}

Как это:
3, 4, 5, 8,
2, 6, 7, 9,
11, 1, 15, 13,
10, 12, 14, 0

Я ставлю ноль в конце, потому что я хочу, чтобы он представлял пустоту, которая может быть перемещена пользователем с использованием логических операторов.

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

Примерно так:

int index = 1;
for(Integer i : list) {
  System.out.print(i);
  if (index % 4 == 0)
    System.out.println();
  index++;
}
1 голос
/ 27 февраля 2012

Если вам нужны ArrayList и Random, тогда вы можете использовать следующее:

Random random = new Random();
ArrayList<ArrayList<Integer>> matrix = new ArrayList<ArrayList<Integer>>();
for(int i=0;i<4;i++) {
    ArrayList<Integer> array = new ArrayList<Integer>();
    for (int j=0;j<4;j++) {
        array.add(random.nextInt(16)+1);
    }
    matrix.add(array);
}

А затем вы можете просто перебрать матрицу и напечатать каждый массив.

for(ArrayList<Integer> array: matrix) {
    System.out.println(array);
}
1 голос
/ 27 февраля 2012

Два ваших цикла for просто отлично разбивают список на двумерный массив.

To print матрица a2, например, вы можете сделать следующее:

for (int[] row : a2) {
    System.out.print("[");
    for (int i : row)
        System.out.printf("%4d", i);
    System.out.println("]");
}

Результат:

[   6  11   3   7]
[   4  14   5   9]
[   2  13  16  10]
[   8   1  12  15]
...