[英]Looping through 2d array
我在使用此代码时遇到困难。 我试图返回一个2d,它是输入数组的反面。 我不确定如何正确编码。 也许有人可能有一些建议
public class arrays {
int[][] transpose(int[][] a) {
int[][] good = new int[a.length][a.length]; /* assign dimension, I want it to be the same as input */
for (int i = 0; i < a.length; i++) {
for (int k = 0; k < a[k].length; k++) { // //nested loop to go through the rows and columns
good[i][k] = a[k][i]; // /// switch elements
}
}
return good;
}
}
您需要仔细考虑哪个变量表示行,哪个变量表示列。 以及在哪个数组中( a
或good
)。
当我在您的代码中切换这些代码时,此改进的版本可以正常工作:
public class Arrays {
static int[][] transpose(int[][] a) {
// Only works if a is rectangular (every row in a has the same number of columns)
int[][] good = new int[a[0].length][a.length];
for (int i = 0; i < a.length; i++) {
// Use a[i].length, not a[k].length because k will be bigger than a.length at some point.
for (int k = 0; k < a[i].length; k++) {
// i = row in 'a', column in 'good'
// k = column in 'a', row in 'good'
good[k][i] = a[i][k];
}
}
return good;
}
}
问题是:
int[][] good = new int[a.length][a.length];
即使原始形状可以是任何矩形形状(不同的行数和列数),在这里您也可以good
创建一个正方形矩阵。 您需要切换行和列的数量,因此new int[a[0].length][a.length]
是一个很好的解决方案。 (假设所有行具有相等的列数,这在矩阵中是必需的) for (int k = 0; k < a[k].length; k++)
在这里, k
将一直增大直到大于a.length
,并且您将获得ArrayIndexOutOfBoundsException
您想遍历第i
行中的所有列,因此上限是a[i].length
,而不是a[k]
。 good[i][k] = a[k][i]
记住i
是该行中的a
,而不是在good
。 good
,它是专栏。 因此,您需要在分配的两边交换i和k。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.