Как перебрать прямоугольный двумерный массив и создать массивы char [] с диагональными сечениями назад (влево)? - PullRequest
0 голосов
/ 15 февраля 2019

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

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

Другими словами, если он начинается слева внизу, новый созданный 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();
   }
}


}

1 Ответ

0 голосов
/ 08 марта 2019

Там счастливы?

public class MVCE {

    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 char[][] addForwardsDiagonals() {
        System.out.println(bigArray.length); 
        System.out.println(bigArray[0].length); 
        char[][] returnArray = new char[bigArray.length][bigArray[0].length];
        for(int i=bigArray.length-1; i>=0; i--) {
            for (int j=0; j<bigArray[0].length && j<i+1; j++) {
                System.out.println(i+" "+j);
                System.out.println(bigArray[i][j]);
                returnArray[i][j] = bigArray[i][j];

            }
        }
        return returnArray;

        /* 1. 4, 0 u
         * 2. 3, 0 p|| 4, 1 v
         * 3. 2, 0 k|| 3, 1 q|| 4, 2 w
         * 4. 1, 0 f|| 2, 1 l|| 3, 2 r|| 4, 3 x
         * 5. 0, 0 a|| 1, 1 g|| 2, 2 m|| 3, 3 s|| 4, 4 z
         */
    }


}
...