2013-12-13 68 views
0

所以我寫了一個程序,乘以兩個矩陣,它工作正常。我只是有一個問題,打印以正確的方式是正確的答案在我的測試類,這裏有我的兩個類:如何在測試儀課程中​​打印我的矩陣?

public class Tester { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    int a[ ][ ]= new int[][]{ {1,2,-2,0} , {-3,4,7,2} , {6,0,3,1} }; 
    int b[ ][ ]= new int[][]{ {-1,3} , {0,9} , {1,-11} , {4,-5} }; 
    MatrixMult.mult(a,b); 
    System.out.println((MatrixMult.mult(a,b))); 

} 
} 

另:

 import java.util.*; 
    public class MatrixMult { 
     public static int[][] mult(int a[][], int b[][]){ 
      int[][] matrix= new int[3][2]; 
      int i,j,k; 
    for(i = 0 ; i < 3 ; i++){ 
     for(j = 0 ; j < 2 ; j++){ 
      for (k = 0 ; k < 4 ; k++){ 
       matrix[i][j] += (a[i][k]*b[k][j]); 

        } 
      //System.out.print(matrix[i][j] + "\t"); 
     } 
    } 
    return matrix;   
} 
    } 

當我打印,我得到這樣的:

[[[email protected] 

什麼,我需要得到的,是這樣的:

-3  43 
    18  -60 
    1  -20 

回答

0

MatrixMult.mult()返回int[][]。這是你正在打印。

有兩種方法可以解決這個問題。一種方法是保留int[][]作爲您正在使用的格式,然後打印出來。

更改測試類來處理這個問題:

public class Tester { 
    public static void main(String[] args) { 
     int a[ ][ ]= new int[][]{ {1,2,-2,0} , {-3,4,7,2} , {6,0,3,1} }; 
     int b[ ][ ]= new int[][]{ {-1,3} , {0,9} , {1,-11} , {4,-5} }; 
     int[][] result = MatrixMult.mult(a,b); 
     for(int[] i : result) { 
      for(int j : i) { 
       System.out.print(j); 
       System.out.print('\t'); 
      } 
      System.out.println(); 
     } 
    } 
} 

在這裏,我們遍歷這給我們詮釋陣列,然後我們遍歷在那些整數詮釋陣列,印刷後每個新行的結果行。

另一種方法是創建一個包含toString()方法(也可能是mult方法)的Matrix類。

你將不得不代碼看起來像:

public class Matrix { 
    private int[][] data; 
    public Matrix(int [][] arg) { 
     data = new int[arg.length][arg[0].length]; 
     for(int i = 0; i < arg.length; i++) { 
      for(int j = 0; j < arg[0].length; j++) { 
       data[i][j] = arg[i][j]; 
      } 
     } 
    } 

    public Matrix mult(Matrix arg) { 
     int[][] result; 

     /* arbtirary sized matrix multiplication code here */ 

     return new Matrix(result); 
    } 

    public String toString() { 
     StringBuilder result = new StringBuilder(); 

     for(int[] i : data) { 
      for(int j : i) { 
       result.append(j) 
         .append('\t'); 
      } 
      result.append('\n'); 
     } 
     return result.toString(); 
    } 
} 

在這種方法中,你正在編寫然後複製陣列傳遞到其自己的內部數據結構,並具有一個toString看起來非常相似的構造循環並打印出原始int [] []結構的代碼。

然後建立一個StringBuilder並從中取得String。然後代碼,不會:

Matrix foo; 
/* stuff */ 
System.out.println(foo); 

將正常工作,因爲調用打印它會要求對象的字符串表示,這是規定。