Разбиение 2D массива на секции

#java #arrays #multidimensional-array #split

Вопрос:

Для задачи в моей лекции по алгоритмам и структурам данных мне нужно найти способ разделить данный 2D-массив на разделы. Вот пример: Программа получает целое число k>0 при запуске. Размер массивов [k*k]x[k*k] Для k=3 этого будет примерно таким:

 2  2  0  1  0  0  0  1  1  
1  0  1  2  1  0  1  0  0  
1  1  1  0  1  2  1  1  2  
2  2  2  2  2  0  0  2  0  
0  0  0  1  1  2  2  1  2  
1  2  2  1  2  0  0  0  1  
0  1  0  1  0  0  2  1  1  
2  1  0  1  0  2  2  2  2  
1  0  1  2  2  2  2  1  2  
 

Теперь я хочу просмотреть массив в виде разделов размера k*k :

 2  2  0    1  0  0    0  1  1    
1  0  1    2  1  0    1  0  0    
1  1  1    0  1  2    1  1  2    

2  2  2    2  2  0    0  2  0    
0  0  0    1  1  2    2  1  2    
1  2  2    1  2  0    0  0  1    

0  1  0    1  0  0    2  1  1    
2  1  0    1  0  2    2  2  2    
1  0  1    2  2  2    2  1  2  
 

Теперь моя задача состоит в том, чтобы добавить целые числа каждого сегмента и сохранить их в массиве определенного размера k*k . На данный момент я с треском провалился, получая только неправильные результаты. Есть ли в этом какой-то трюк или какая-то библиотека, которая обладает такой функциональностью?

Комментарии:

1. Можете ли вы опубликовать свое решение, к которому вы пришли до сих пор?

Ответ №1:

 int[][] result = new int[k][k];
for (int i = 0; i < k * k; i  ) {
    for (int j = 0; j < k * k; j  ) {
        result[i / k][j / k]  = array[i][j];
    }
}
 

Ответ №2:

Вот что я придумал до сих пор. Я думаю, что перепутал петли:

 private static ArrayList<Integer> getPathZij() {
    ArrayList<Integer> list = new ArrayList<>();
    int k = (int) Math.sqrt(map.length);
    for (int v = k; v < map.length; v = v   k) {
        for (int i = v - k; i < v; i  ) {
            int value = 0;
            for (int j = v - k; j < v; j  ) {
                value = value   map[i][j];
            }
            list.add(value);
        }
    }
    return list;
}