晚上好,
我正在尝试编写一个创建并返回2D数组的方法,其中每个位置的元素与参数数组的镜像位置中的元素相同。不幸的是,无论我在方法调用中输入什么数字,我的编译器都会出现“越界”错误。以下是我的计划。告诉我哪里出错了!谢谢!
public static int[][] transpose(int [][] a) {
int r = a.length;
int c = a[r].length;
int [][] t = new int[c][r];
for(int i = 0; i < r; ++i) {
for(int j = 0; j < c; ++j) {
t[j][i] = a[i][j];
}
}
return t;
}
}
答案 0 :(得分:2)
java中的数组基于0,将您对 c 的分配更改为:
int c = a[r - 1].length;
答案 1 :(得分:1)
@Suraj是正确的,但你必须假设2D数组是矩形的,在这种情况下,将第3行更改为更高效:
int c = a[0].length;
@Kris答案文本是正确的但是代码示例是错误的行。
请注意,此错误是“雅虎答案”中发布的“答案”的再现:http://answers.yahoo.com/question/index?qid=20080121204551AAn62RO
答案 2 :(得分:0)
你的问题在于第二行:a[r].length
返回列数,但数组的索引是0.你应该相应地调整:
int r = a.length - 1;