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;
答案 0 :(得分:0)
这里几乎没有什么可去,但你是否考虑到如果你声明一个新的int [3],数组中的第一个位置是[0]而最后一个是[2]?
为什么不在抛出异常的行之前输出r和c的值?
答案 1 :(得分:0)
堆栈跟踪说导致异常的越界索引是0,所以这意味着你已经在某处创建了一个零长度数组。我不知道你发布的代码在哪里,但可能在这个声明中:
int[][] n = new int[r][c];
r
或c
为0。