以蛇形打印数组时如何处理ArrayIndexOutofBounds

时间:2019-05-19 22:16:48

标签: java

我需要以蛇形形式打印矩阵。因此,对于此矩阵,输出应为:

我的问题是这段代码抛出ArrayIndexOutofBounds。我该如何处理以避免这种情况?

int[][] mat= {{1,2,3},{4,5,6},{7,8,9}};
        int row=mat.length;
        int col=mat[0].length-1;

        int c=col;
        int r=0;

        while(r < row) {
            for(int j=c;j>=0;j--) {
            //  System.out.print("r: " + r);
            //  System.out.print(" " + mat[r][j]);


            }
            r=r+1;
            for(int j=0;j<=c;j++) {
        //  System.out.print("r: " + r);
            //System.out.print(" " + mat[r][j]);
            }
            r=r+1;


        }

3 2 1 4 5 6 9 8 7

5 个答案:

答案 0 :(得分:0)

这就是我要做的:

int[][] mat= {{1,2,3},{4,5,6},{7,8,9}};
int row=0;
while(row < mat.length) {

   if(row%2 == 0){ //if an even row, go right to left
      int col = mat[0].length - 1;
      while(col >= 0) { System.out.print(mat[row][col]); col--; } 
   }else {
      int col = 0;
      while(col < mat[0].length) { System.out.print(mat[row][col]); col++; } 
   }
   row++;
}

您要出错的地方是在循环内递增r,而不检查它是否仍小于打印前的长度。 您还可以将此检查添加到代码中以使其开始工作:

.
.
r=r+1;
if(r >= row)
   break;
for(int j=0;j<=c;j++) {
.
.
.

答案 1 :(得分:0)

我看到第二行说:

int row=mat.length;

由于数组索引从0开始,因此应将其更改为:

int row=mat.length-1;

以避免在调用mat[row]时出现异常。

答案 2 :(得分:0)

您不必设置太多的变量,而只需设置for循环即可,该循环首先确定我们是从行的结尾还是开头开始,然后遍历所有整数。

        int[][] mat= {{1,2,3},{4,5,6},{7,8,9}};    
        for(int row = 0; row < mat.length; row++){
            if(row%2 == 0){
                for(int col = mat[row].length -1; col >= 0; col--){
                    System.out.print(mat[row][col] + " ");
                }                
            }else{
                for(int col = 0; col < mat[row].length; col++){
                    System.out.print(mat[row][col] + " ");
                }                
            }
        }

答案 3 :(得分:0)

这是一种方法。重要的是要考虑行长以允许数组参差不齐。

      int[][] mat = { { 1, 2, 3
            }, { 4, 5, 6
            }, { 7, 8, 9, 10, 11
            }, { 12, 13
            }, { 14, 15, 16, 17, 18, 19
            }

      };

      for (int r = 0; r < mat.length; r++) {
         if (r % 2 == 0) {
            for (int c = mat[r].length - 1; c >= 0; c--) {
               System.out.print(" " + mat[r][c]);
            }
         }
         else {
            for (int c = 0; c < mat[r].length; c++) {
               System.out.print(" " + mat[r][c]);
            }
         }

      }

请注意,如果您想从左到右蜿蜒,则将其修改为使用r % 2 == 1。如果您想自下而上,请更改外循环以从最后一行开始。

答案 4 :(得分:0)

您的代码引发ArrayIndexOutOfBounds异常,因为第二次迭代时r变为3(r = r + 1),并且您尝试访问mat [ 3 ] [2](即,您正在访问的值第四行不可用)

return this.http.get('../assets/exercises.json')

因此,所有奇数行(即第一,第三,第五行..)元素的打印顺序将相反,偶数行的元素将按照给定矩阵的格式打印