public class Matrix {
   
   static int ROW = 3;
   static int COLUMN = 3;
   int[][] A;
   
   public Matrix() {
   
     A = new int[ROW][COLUMN];
     for (int i = 0;i < ROW;i++) {
      for (int j = 0;j < COLUMN;j++) {
      A[i][j] = i * 10 + j;
      }
     }
     
   }
   
   private void swapMatrix() {
     
     for (int i = 0;i < ROW;i++) {
      for (int j = 0;j < COLUMN;j++) {
      int temp = A[i][j];
      A[i][j] = A[j][i];
      A[j][i] = temp;
      }
     }
     
   }
   
   private void showMatrix() {
     
     for (int i = 0;i < ROW;i++) {
      for (int j = 0;j < COLUMN;j++) {
      System.out.println();
      System.out.println("Element"+i+j+" is: "+A[i][j]);
      System.out.println();
      }
     }
     
   }
   
   public static void main(String args[]) {
     Matrix matrixObj = new Matrix();
     System.out.println("Original Matrix:");
     matrixObj.showMatrix();
     matrixObj.swapMatrix();
     System.out.println("Turned Matrix:");
     matrixObj.showMatrix();
   }
}

解决方案 »

  1.   

    不能在原矩阵通过交换求转置矩阵,应该另外生成一个新的矩阵。因为:row 和 COLUMN 不一定就是相同的,在二者不同的情况下,二维数组将发生越界异常
      

  2.   

    谢谢回复,但是以前用C语言也写过类似的东西 好象可以在一个数组里面完成。
    我注意到row 和 COLUMN 会不相等,所以在代码里都设置为3。关键是不明白为什么用下面的代码不能实现转置:
    private void swapMatrix() {
         
         for (int i = 0;i < ROW;i++) {
          for (int j = 0;j < COLUMN;j++) {
          int temp = A[i][j];
          A[i][j] = A[j][i];
          A[j][i] = temp;
          }
         }
         
       }
    明明将A[i][j] 和A[j][i]交换了的,为什么用System.out.println("Element"+i+j+" is: "+A[i][j]);打印出来还是原来的顺序。始终想不通问题在哪里。
      

  3.   

    你交换了两遍,又交换回来了。A[0][1]--->A[1][0],之后A[1][0]--->A[0][1],所以没变.
      

  4.   

    private void swapMatrix() {
         
         for (int i = 0;i < ROW;i++) {
          for (int j = 0;j <=i;j++) {
          int temp = A[i][j];
          A[i][j] = A[j][i];
          A[j][i] = temp;
         
          }
         }
         
         
       }