我正在尝试转置一个方形的二维数组,并且只是在一段时间内使用了数组。我理解我正在请求一个对我的数组存在的索引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;
}
}
}
}
我希望有人可能会给我一些指示。
答案 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
,这意味着它具有索引0
和1
。你的索引超出界限。