Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转置矩阵_Java_Matrix_Transpose - Fatal编程技术网

Java 转置矩阵

Java 转置矩阵,java,matrix,transpose,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; } 以及打印方法(如

嘿,我的任务是和班级和客户一起工作。对于这个类,我的转置方法没有按它应该的方式打印矩阵。以下是我的方法:

  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;
  }
以及打印方法(如果需要查看):

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

通话后,行和列没有打印正确的号码。如果能帮上忙,那就太好了

问题在于,在转置方法中,矩阵a和this都指向同一个对象。 所以你可以试试

1. Matrix a= new Matrix(...);//... since it depends on your constructor

您可以循环矩阵的下三角,并将元素[i][j]与[j][i]交换,因为当前您正试图交换两次


因此,请确保不交换两次,并且交换正确

此解决方案使用一个新数组来保存转置的值:

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();
    };
publicstaticvoidmain(字符串[]args){
int[][]矩阵=新int[][]{
{ 9, 7, 1 },
{ 7, 1, 1 },
{ 5, 5, 7 }
};
int[][]转置=新int[3][3];

对于(int c=0;cyou将交换每一行和每一列两次
1. Matrix a= new Matrix(...);//... since it depends on your constructor
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();
    };