我对此代码有困难。我试图返回一个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;
}
}
答案 0 :(得分:2)
您需要仔细考虑哪个变量表示一行,哪一个表示一列。以及哪个数组(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
您想要遍历行{{中的所有列1}},所以上限是i
,而不是a[i].length
。a[k]
请注意good[i][k] = a[k][i]
是 i
中的行,而不是a
中的行。在good
中,它是列。所以你需要在作业的两边交换你的i和k。