为什么我收到ArrayIndexOutOfBoundsException错误?

时间:2014-09-13 21:59:28

标签: java indexoutofboundsexception

我正在尝试转置一个方形的二维数组,并且只是在一段时间内使用了数组。我理解我正在请求一个对我的数组存在的索引a。但这怎么可能呢?如果我经历一次迭代,在我看来应该没有问题。

我的程序包含以下两个类。

public class Transposition {
    public static void main(String[] args) {
        Matrix.transpose(new int[][] {new int[] {1, 2}, new int[] {3, 4}, new int[] {5, 6}, new int[] {7, 8}});
    }
}

public class Matrix {

    public static void transpose(int[][]a) {

        int n = a.length;

        for (int i = 0; i < n; i++) {
            for (int j = i+1; j < n; j++) {
                int temp = a[i][j];
                a[i][j] = a[j][i];
                a[j][i] = temp;                 
            }
        }
    }
}

我希望有人可能会给我一些指示。

2 个答案:

答案 0 :(得分:2)

n是最外层数组的长度。它比构成其元素的数组长。因此,j < n时循环将导致错误,因为j将超过下级数组的长度。

  

我正在尝试转置方形二维数组

作为user2357112 says,您没有方阵。你有一个4x2的数组(一个包含四个条目的数组,每个条目由两个条目的数组组成)。

答案 1 :(得分:0)

在您的示例中,int[][] a = new int[4][2]在您的方法n = 4内,所以这里:

a[i][j] = a[j][i];i获取值0,1,2,3,但子数组长度为2,这意味着它具有索引01 。你的索引超出界限。