继续获取ArrayIndexOutOfBoundsException

时间:2017-06-02 03:43:00

标签: java arrays exception multidimensional-array indexoutofboundsexception

我正在尝试创建一个输出模式的数组,具体取决于我为输入提供的行和列的数量,并且当它到达第三个方法时我收到错误。我明白数组从索引零开始,如果我为矩阵输入(0 0)它超出界限但我不知道如何解决问题。谢谢你的帮助!

这是第一堂课的代码:

public class Transpose {

    public static int [][] createPatterned2DArray(int rows, int cols) 
        {
            int [][] table = new int [rows] [cols];                     
            for (int numRows = 0; numRows < table.length; numRows++){   
                for (int numCols = 0; numCols < table[0].length; numCols++){

                    table [numRows][numCols] = 10 + rows*(numRows +1) + numCols; 

                }
            }
            return table; 
        }


        public static void print2DArray (int[][] matrix) 
        { 
            for (int row = 0; row < matrix.length; row++)
            {
                for (int col = 0; col < matrix[0].length; col++)
                {
                    System.out.printf("%-4d",matrix[row][col]);
                }
                System.out.println();
            }

        }
        public static void print2DArrayTransposed(int [][] matrix)
        {   
            for (int row = 0; row < matrix[0].length; row++)
            { 
                for (int col = 0; col < matrix.length; col++)
                {
                    //try { 
                    //  if (matrix[0] == 0) {
                        //  System.out.println(matrix[0][0]); 
                    //  throw new Exception();
                        System.out.printf("%-4d",matrix [col][row]);
                    //  }
                    //catch (Exception e){
                    //  System.out.print(e);
                    }
                    System.out.println();

            }
        }
}

这是第二节课:

import java.util.*;
public class TestTranspose extends Transpose {

  public static void main(String[] args) 
  { 
    Scanner scan = new Scanner (System.in);
    int rows = scan.nextInt(); 
    int cols = scan.nextInt(); 

    int [][] table = createPatterned2DArray(rows,cols);  
    print2DArray(table);
    System.out.println();
    print2DArrayTransposed(table);
    System.out.println();
  } 
}

这是我得到的错误,它让我疯了! 当我为数组输入(0 0)的输入时,我似乎无法绕过如何抛出异常或使输出不显示任何内容。如何纠正这行不允许输出(0 0)数组的代码?

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Transpose.print2DArrayTransposed(Transpose.java:32)
at TestTranspose.main(TestTranspose.java:13)

2 个答案:

答案 0 :(得分:2)

如果没有首先确保<html> <head> <base href="/"> </head> </html> ,您就无法安全地matrix[0].length。在另外两种方法中,matrix.length != 0上的外部循环会处理这个问题。

但在row中,你的外环正在尝试print2DArrayTransposed;即使在row < matrix[0].length时也无法阻止它尝试这样做。您可以通过以下两种方式之一解决此问题:在matrix.length == 0的顶部添加此提前纾困:

print2DArrayTransposed

或将'row'上的外循环更改为:

if (matrix.length == 0)
    return;

答案 1 :(得分:0)

Transpose.print2DArrayTransposed()方法中查看这行代码:

for (int row = 0; row < matrix[0].length; row++)

您正在尝试访问matrix的第一个元素,但没有元素,因为长度为零。

0x0数组有效,因此无需首先禁止创建数组。我的建议只是简单地检查方法的开头是否matrix的长度为零,如果是,则返回,因为没有要打印的内容(或者打印一些有用的消息)。

public static void print2DArrayTransposed(final int[][] matrix) {
    if (matrix.length == 0) {
        return;
    }
    //...
}