繁体   English   中英

如何遍历矩形2D数组并创建具有向后(向左倾斜)对角线部分的char []数组?

[英]How to iterate through a rectangular 2D array and create char[] arrays with backwards (left-leaning) diagonal sections?

我想使用一个矩形数组来创建另一个2D数组,该数组中充满了向左倾斜的对角线部分。

我已经阅读了这个问题的最佳答案,并且尝试使它对我有用,但是它仅显示了如何获得右倾部分。

换句话说,如果它从左下角开始,则创建的新2D数组应包含以下值:

{'u'},
{'p', 'v'},
{'k', 'q', 'w'},
{'f', 'l', 'r', 'x'},
{'a', 'g', 'm', 's', 'z',} 
// etc..

如何使2D数组充满左倾斜的对角线部分?

我的代码示例:

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();
   }
}


}

有幸福吗?

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
         */
    }


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM