我有一个类,该类的方法可以在给定数组,行和列的情况下转置数组
public class Transpose {
public static void main(String[] args) {
int[][] array = new int[6][5];
System.out.println("Original:");
for(int i = 0; i < array.length; i++)
{
for(int j = 0; j < array[i].length; j++)
{
array[i][j] += i+1;
System.out.print(array[i][j] + " ");
}
System.out.println();
}
System.out.println();
transpose(array, 6, 5);
}
public static void transpose(int[][] array, int arrayRows, int arrayColumns)
{
int[][] transposedArray = new int[arrayRows][arrayColumns];
System.out.println("Transposed:");
for(int i = 0; i < array.length; i++)
{
for(int j = 0; j < array[i].length; j++)
{
transposedArray[i][j] = array[j][i];
System.out.print(transposedArray[i][j] + " ");
}
System.out.println();
}
}
}
我得到的输出看起来像这样:
Original:
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
6 6 6 6 6
Transposed:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
我意识到该方法仅在 arrayRows 和 arrayColumns 的值相同的情况下才有效,例如:6,6 或 5、5。我试图将值彼此相对放置,将行放置在列中,反之亦然,但是这没有用。如何获得适用于非矩形/正方形数组的方法?
答案 0 :(得分:1)
请参阅行注释以获取解释。这些是我修改过的唯一行。
public static void transpose(int[][] array, int arrayRows, int arrayColumns) {
int[][] transposedArray = new int[arrayColumns][arrayRows]; //swap number of rows and columns
System.out.println("Transposed:");
for (int i = 0; i < transposedArray.length; i++) { //take the length of transposedArray, not array
for (int j = 0; j < transposedArray[i].length; j++) { //take the length of transposedArray, not array
transposedArray[i][j] = array[j][i];
System.out.print(transposedArray[i][j] + " ");
}
System.out.println();
}
}
答案 1 :(得分:1)
您需要交换转置矩阵中arrayRows
和arrayColumns
的位置,因为新矩阵应该是[5][6]
而不是[6][5]
。 / p>
所以你的行
int[][] transposedArray = new int[arrayRows][arrayColumns];
成为
int[][] transposedArray = new int[arrayColumns][arrayRows];
我们还需要在以下语句中交换i
和j
,因为循环遵循原始矩阵的索引:
transposedArray[i][j] = array[j][i];
到
transposedArray[j][i] = array[i][j];
最后,您不能像现在那样在创建转置矩阵时打印它,因为您只是以这种方式重新打印原始矩阵。我建议在完成创建矩阵后将其打印出来。
通过这些更改,您的代码最终如下所示:
public static void main(String[] args) {
int[][] array = new int[6][5];
System.out.println("Original:");
for(int i = 0; i < array.length; i++)
{
for(int j = 0; j < array[i].length; j++)
{
array[i][j] += i+1;
System.out.print(array[i][j] + " ");
}
System.out.println();
}
System.out.println();
transpose(array, 6, 5);
}
public static void transpose(int[][] array, int arrayRows, int arrayColumns)
{
int[][] transposedArray = new int[arrayColumns][arrayRows];
System.out.println("Transposed:");
for(int i = 0; i < array.length; i++)
{
for(int j = 0; j < array[i].length; j++)
{
transposedArray[j][i] = array[i][j];
}
}
for(int i = 0; i < transposedArray.length; i++) { //print the transposed matrix
for(int j = 0; j < transposedArray[i].length; j++) {
System.out.print(transposedArray[i][j] + " ");
}
System.out.println();
}
}
您可以看到一个有效的示例here。
答案 2 :(得分:0)
for(int i = 0; i < array.length; i++)
//应该计算行数。 = 6
从0 ... 5迭代
for(int j = 0; j < array[i].length; j++) // should count the number of columns = 5
从0..4重复
transposedArray[i][j] = array[j][i];
要访问6 ...,您需要j = 5;我= 0 ... 4 您的循环无法访问值