2015-05-28 249 views
1

我目前正在試圖找出如何redifine我的toString方法,以便它將顯示矩陣。下面的代碼..矩陣到字符串輸出

import java.util.Random; 


public class TextLab09st 
{ 
    public static void main(String args[]) 
    { 
     System.out.println("TextLab09\n\n"); 
     Matrix m1 = new Matrix(3,4,1234); 
     Matrix m2 = new Matrix(3,4,1234); 
     Matrix m3 = new Matrix(3,4,4321); 
     System.out.println("Matrix m1\n"); 
     System.out.println(m1+"\n\n"); 
     System.out.println("Matrix m2\n"); 
     System.out.println(m2+"\n\n"); 
     System.out.println("Matrix m3\n"); 
     System.out.println(m3+"\n\n"); 
     if (m1.equals(m2)) 
      System.out.println("m1 is equal to m2\n"); 
     else 
      System.out.println("m1 is not equal to m2\n"); 
     if (m1.equals(m3)) 
      System.out.println("m1 is equal to m3\n"); 
     else 
      System.out.println("m1 is not equal to m3\n"); 
    } 
} 


class Matrix 
{ 
    private int rows; 
    private int cols; 
    private int mat[][]; 

    public Matrix(int rows, int cols, int seed) 
    { 
     this.rows = rows; 
     this.cols = cols; 
     mat = new int[rows][cols]; 
     Random rnd = new Random(seed); 
     for (int r = 0; r < rows; r ++) 
      for (int c = 0; c < cols; c++) 
      { 
       int randomInt = rnd.nextInt(90) + 10; 
       mat[r][c] = randomInt; 
      } 
    } 
    public String toString() 
    { 

     return ("[" + mat + "]"); 
    } 
    public boolean equals(Matrix that) 
    { 
     return this.rows == (that.rows)&&this.cols == that.cols; 
    } 


} 

我知道如何顯示它以及如何redifine equals方法,我覺得這只是晚了,我失去了一些東西愚蠢。對不起,不便之處!

編輯:對不起,我忘了指定它必須顯示爲2維行x列顯示。

編輯2:現在我遇到了重新定義equals方法的麻煩,因爲它是我的任務所必需的。我把它改寫了這個:

public boolean equals(Matrix that) 
     { 
     return this.mat == that.mat; 
     } 

,它仍然輸出:

m1 is not equal to m2 
m1 is not equal to m3 

有沒有簡單的方法來解決這一問題?

+0

你目前的輸出和你想要什麼? – Saif

+0

我的當前輸出只是矩陣的內存地址。我需要它的二維顯示(行x列) – cabb007

+0

等於,你應該檢查行和列國家是否相同,然後你可以檢查數組的elems是否相同。你可以像使用字符串方法一樣使用double for循環來訪問每個元素,看看它們是否相同 – Dude

回答

1

你不得不做在你的矩陣中的每個單元格嵌套循環。

public String toString() 
{ 

    String str = ""; 

    for (int i = 0 ; i<this.rows ; i ++){ 
     for (int j = 0 ; j < this.cols ; j++){ 
      str += mat[i][j]+"\t"; 
     } 
     str += "\n"; 
    } 
    return str; 
} 

至於「平等」的方法,我不太清楚什麼是標準。 如果兩個矩陣的行數和列數相同,您的應用程序是否認爲兩個矩陣相等?

P.S.

重寫equals方法是一種非常好的做法,但重寫「hashCode」方法也是一種更好的做法。 可能與您的應用無關,但這很重要。

希望能幫到:)

+0

我忘記提及的另一件事是它是重寫平等方法的任務的一部分。是的,它會檢查兩個矩陣是否具有相似數量的行和列。我現在意識到這與我通過重寫這種方法試圖完成的事情無關。 – cabb007

+0

現在我無法編寫用於重寫equals方法的代碼,因爲我似乎無法弄清楚如何使用除行和列變量以外的內容來編寫它。任何提示或幫助,將不勝感激! – cabb007

+0

事實上,保持行和列作爲班級成員的標準是重要的。 instread你可以添加2種方法來檢索cols的數量和行數,並在equals方法中使用它們,方法如下: public int numOfRows(){ \t return this.mat.length; } public int numOfCols(){ \t if(this。numOfRows()> 0) \t \t return this.mat [0] .length; \t else \t \t return 0; } 公共布爾等於(矩陣) { \t返回this.numOfRows()==(that.numOfRows())&& this.numOfCols()== that.numOfCols(); } –