转置矩阵

时间:2014-03-10 14:45:32

标签: java matrix transpose

嘿,因为我的任务,我们正在与班级和客户合作。对于这个类,我的转置方法不是按照它应该的方式打印我的矩阵。这是我的方法:

  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

调用后,行和列不会打印正确的数字。任何帮助解决这个问题都会很棒!

2 个答案:

答案 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();
    };