矩阵转置

  1 package test;
  2 public class Arithmetic3 
  3 {    
  4     //声明不可改变的全局变量
  5     static final int p=0;
  6     static void arith(int[][] arr)
  7     {
  8         //定义一个以最大列为标准的数组
  9         int[][] newArr=new int[arr[p].length][arr[p].length];
 10         //定义一个以最大行为标准的数组
 11         int[][] newArr1=new int[arr.length][arr.length];
 12         //将arr数组值赋给新数组newArr或newArr1
 13         for(int i=0;i<arr.length;i++)
 14         {
 15             for(int j=0;j<arr[p].length;j++)
 16             {
 17                 if(arr.length<=arr[p].length)
 18                     newArr[i][j]=arr[i][j];
 19                 else
 20                     newArr1[i][j]=arr[i][j];
 21             }
 22         }
 23         
 24         //两种情况下的转置
 25         if(arr.length<=arr[p].length)
 26         {    
 27             //newArr矩阵转置
 28             for(int i=0;i<arr[p].length;i++)
 29             {
 30                 for(int j=i;j<arr[p].length;j++)
 31                 {
 32                     if(i!=j)
 33                     {
 34                         int temp=newArr[i][j];
 35                         newArr[i][j]=newArr[j][i];
 36                         newArr[j][i]=temp;
 37                     }
 38                 }
 39             }
 40         }    
 41         else
 42         {
 43             //newArr1矩阵转置
 44             for(int i=0;i<arr.length;i++)
 45             {
 46                 for(int j=i;j<arr.length;j++)
 47                 {
 48                     if(i!=j)
 49                     {
 50                         int temp=newArr1[i][j];
 51                         newArr1[i][j]=newArr1[j][i];
 52                         newArr1[j][i]=temp;
 53                     }
 54                 }
 55             }
 56         }
 57         
 58         //定义一个新的非标准数组,作为最后转置后的输出矩阵
 59         int[][] newArr2=new int[arr[p].length][arr.length];
 60         //将newArr或newArr1数据赋给newArr2
 61         for(int i=0;i<arr[p].length;i++)
 62         {
 63             for(int j=0;j<arr.length;j++)
 64             {
 65                 if(arr.length<=arr[p].length)
 66                     newArr2[i][j]=newArr[i][j];
 67                 else
 68                     newArr2[i][j]=newArr1[i][j];
 69             }
 70         }
 71         
 72         //输出转置后的矩阵
 73         outputArr(newArr2);
 74     }
 75     
 76     //定义输出数组的函数模块
 77     static void outputArr(int[][] arr)
 78     {
 79         for(int i=0;i<arr.length;i++)
 80         {
 81             for(int j=0;j<arr[p].length;j++)
 82             {
 83                 buWei(arr[i][j]);
 84                 if((j+1)%arr[p].length==0)
 85                     System.out.println();
 86             }
 87         }
 88     }
 89     
 90     //空格补位函数,保证矩阵输出后排列整齐
 91     static void buWei(int x)
 92     {
 93         if(x>=0 && x<10)
 94             System.out.print("     "+x);
 95         else if(x<100)
 96             System.out.print("    "+x);
 97         else if(x<1000)
 98             System.out.print("   "+x);
 99         else if(x<10000)
100             System.out.print("  "+x);
101         else if(x<100000)
102             System.out.print(" "+x);
103         else if(x<1000000)
104             System.out.print(" "+x);
105     }
106     
107     //主函数
108     public static void main(String[] args) 
109     {
110         //要转置的矩阵
111         int[][] a={{11,34,5,56},
112                     {4,54,43,0},
113                     {23,6,38,8},
114                     {25,9,36,8},
115                     {25,9,35,8}};
116         System.out.println("     原矩阵");
117         //输出原矩阵
118         outputArr(a);
119         System.out.println("\n     转置后的矩阵");
120         //输出转置后的矩阵
121         arith(a);
122     }
123 }

 

posted @ 2015-04-28 17:28  Joe_Shine  阅读(282)  评论(0编辑  收藏  举报