Java方法,在负方向上对角打印2D数组

时间:2015-10-25 00:39:54

标签: java arrays multidimensional-array

我能够编写一个打印2D数组的方法:

   {a,b,c},              
   {d,e,f},
   {g,h,i},

如此:

a db gec hf i

以下是方法:

 public static void d2(int[][] b){
   for( int k = b.length - 1 ; k > 0; k-- ) {
      for( int j = 0 ; j < b.length ; j++ ) {
        int i = k - j;
        if( i < b.length && j < b.length ) {
            System.out.print(b[i][j] + " " );}
          }
        System.out.println();}
      }
    }   

现在我想编写一个在负方向对角线打印的方法,即:

 g dh aei bf c

我需要更改原始方法以使其以对角线方式打印出来吗?

由于

1 个答案:

答案 0 :(得分:0)

没有得到你提到的输出,而是获得ArrayIndexOutOfBoundsException。这是同一程序的修改版本,它给出了预期的输出:

    int b[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    // for (int i = (b.length * 2) - 1; i >= 0; i--) {
    for (int i = 0; i < (b.length * 2); i++) {
        for (int j = i, k = 0; j >= 0; j--, k++)
            if (j < b.length && k < b.length)
                System.out.print(b[j][k] + " ");
        System.out.println();
    }

要反转,只需取消/评论其他i循环即可。 i循环充当计数器或级别跟踪器(就像我们现在遍历的对角线一样)。因此,根据i值,j&amp; k初始化自己&amp;沿对角线方向循环。

由于方向相同&amp;你只想要一个逆序,只需改变i循环即可。因此,它不是从0thnth对角线,而是相反的; nth0th对角线。