我该如何修复此ArrayIndexOutOfBoundsException

时间:2013-12-18 03:44:50

标签: java

public class Matrix
{


  private int[][] matrix;
  private int rows;
  private int cols;

  public Matrix(int r, int c)
  {
    matrix = new int[r][c];
    this.rows = r;
    this.cols = c;
  }
  public Matrix(int[][] m)
  {
    matrix = new int[m.length][m[0].length];
    this.rows = m.length;
    this.cols = m[0].length;

    for(int i=0; i<m.length; i++)
    {
      for(int j=0; j<m[0].length; j++)
      {
        matrix[i][j] = m[i][j];
      }
    }
  }

这是我用我的构造函数开始我的课程的方式,后来我加入了代码:

public int get(int r, int c)
  {
    return matrix[r][c];
  }

任何人都可以向我解释为什么我在这里得到ArrayIndexOutOfBoundsException? 这是我的错误:

 java.lang.ArrayIndexOutOfBoundsException: 0
    at Matrix.get(Matrix.java:117)
    at MatrixTest.dispatch(MatrixTest.java:76)
    at MatrixTest.main(MatrixTest.java:21)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

我制作了一个测试人员类并调用了这样的get方法:

case 5:
        System.out.println(matrix.get(0, 0));
        break;

之后:

       int[][] n = new int[r][c];
         for(int i=0; i<n.length; i++)
         {
           for(int j=0; j<n[0].length; j++)
           {
             n[i][j] = scan.nextInt();
           }
         }

       Matrix matrix = new Matrix(n);
       break;

2 个答案:

答案 0 :(得分:0)

这里几乎没有什么可去,但你是否考虑到如果你声明一个新的int [3],数组中的第一个位置是[0]而最后一个是[2]?

为什么不在抛出异常的行之前输出r和c的值?

答案 1 :(得分:0)

堆栈跟踪说导致异常的越界索引是0,所以这意味着你已经在某处创建了一个零长度数组。我不知道你发布的代码在哪里,但可能在这个声明中:

   int[][] n = new int[r][c];

rc为0。