Я хочу использовать прямоугольный массив для создания другого двумерного массива, полного из него диагональных секций, расположенных слева.
Я прочитал верхний ответ в на этот вопрос , и я 'мы пытались заставить его работать для меня, но он только показывает, как получить правые участки.
Другими словами, если он начинается слева внизу, новый созданный 2D-массив должен содержать следующие значения:
{'u'},
{'p', 'v'},
{'k', 'q', 'w'},
{'f', 'l', 'r', 'x'},
{'a', 'g', 'm', 's', 'z',}
// etc..
Как создать двумерный массив, заполненный диагональными секциями, расположенными слева?
Пример моего кода:
public class MCVE {
private static char[][] bigArray = {
{'a', 'b', 'c', 'd', 'e', 'q'},
{'f', 'g', 'h', 'i', 'j', 'w'},
{'k', 'l', 'm', 'n', 'o', 'e'},
{'p', 'q', 'r', 's', 't', 'r'},
{'u', 'v', 'w', 'x', 'z', 't'}};
public static void main(String[] args) {
addForwardsDiagonals();
}
private static void addForwardsDiagonals() {
final int WIDTH = bigArray[0].length;
final int HEIGHT = bigArray.length;
ArrayList<Character> charArr = new ArrayList<>(5);
char[][] diagonalArr = new char[bigArray.length + bigArray[0].length -1][];
// iterate through the array diagonally
for( int k = 0 ; k <= WIDTH + HEIGHT - 2; k++ ) {
for( int j = 0 ; j <= k ; j++ ) {
int i = k - j;
if( i < HEIGHT && j < WIDTH )
charArr.add(bigArray[i][j]);
}
// create a char[] array from charArr
charArr.trimToSize();
char[] tempArr = new char[charArr.size()];
for(int i = 0; i < tempArr.length; i++)
tempArr[i] = charArr.get(i);
// add the newly created char[] array to diagonalArr
diagonalArr[k] = (tempArr);
// clear charArr
charArr.clear();
}
// print the new 2D array
for(char[] arr: diagonalArr) {
for(char c: arr) {
System.out.print(c + " ");
}
System.out.println();
}
}
}