嘿,因为我的任务,我们正在与班级和客户合作。对于这个类,我的转置方法不是按照它应该的方式打印我的矩阵。这是我的方法:
public Matrix transpose(){
Matrix a= this;
for(int r=0; r<size;r++){
for(int c=0;c<size;c++){
a.table[r][c]=this.table[c][r];
}
}
return a;
}
这是调用方法的客户端:
case 5:
first.init(LOW,UP);
System.out.println("The original matrix is:");
first.print();
result=first.transpose();
System.out.println("The resulting matrix is:");
result.print();
break;
和打印方法,如果你需要看到它:
public void print(){
for(int r=0;r<size;r++){
for(int c=0;c<size;c++)
System.out.printf("%5d",table[r][c]);
System.out.println();
}
}
但输出不正确:
The original matrix is:
9 7 1
7 1 1
5 5 7
The resulting matrix is:
9 7 5
7 1 5
5 5 7
调用后,行和列不会打印正确的数字。任何帮助解决这个问题都会很棒!
答案 0 :(得分:0)
问题在于,在转置方法中,Matrix a和this都指向同一个对象。 所以你可以尝试
1. Matrix a= new Matrix(...);//... since it depends on your constructor
或
你可以循环矩阵的下三角形并用[j] [i]交换元素[i] [j],因为目前你'试图'交换两次。
因此,请确保您没有交换两次并且正确交换
答案 1 :(得分:0)
此解决方案使用新数组来保存转置值:
public static void main(String[] args) {
int[][] matrix = new int[][] {
{ 9, 7, 1 },
{ 7, 1, 1 },
{ 5, 5, 7 }
};
int[][] transposed = new int[3][3];
for (int c=0; c<3; c++) for (int r=0; r<3; r++) transposed[c][r] = matrix[r][c];
for (int r=0; r<3; r++) {
for (int c=0; c<3; c++) {
System.out.print(transposed[r][c] + " ");
}
System.out.println();
};