2017-02-16 77 views
1

我有一個任務來練習我的Java類的接口,抽象類,子類和繼承。在我的抽象超類(稱爲矩陣)中,我必須重寫toString()方法(使用相同的簽名),以便它打印由空格分隔的數組的所有元素和用換行符分隔的行。像這樣:在Java中重寫toString()的問題

public String toString(){ 

    String result=""; 

    for(int x=0; x<nRows(); x++){ 
     for(int y=0; y<nColumns(); y++){ 
      result+=""+get(x,y)+" "; 
     } 
     result+="\n"; 
    } 
    return result; 
} 

到目前爲止這麼好,我想。然後,在矩陣的其中一個子類(FullMatrix)中,我有一個生成隨機數以填充m×n矩陣的靜態方法。方法如下:

public static FullMatrix randomMatrix(int m, int n, double low, double high){ 

    FullMatrix resultMatrix = new FullMatrix(m,n); 
    for(int x=0; x<m; x++){ 
     for(int y=0; y<n; y++){ 
      resultMatrix.set(x,y,Math.round(low+Math.random()*(high-low))); 

     } 
    } 
    return resultMatrix; 
} 

再次,到目前爲止沒有問題。但在我的主要方法,在另一個類,當我調用靜態方法randomMatrix這樣的:

FullMatrix a = new FullMatrix(4,4); 
    a.randomMatrix(4,4,-3,5); 

它返回我一個矩陣全是零。我認爲問題出在我的隨機算法上,但沒有。我開始調試,結果是方法randomMatrix中的resultMatrix使用toString方法,併成爲一個大字符串(應該打印結果),所以我不能爲元素指定新的隨機值。奇怪的是toString()永遠不會在randomMatrix中調用。那麼爲什麼resultMatrix使用toString方法?我嘗試在我的超類中註釋掉toString重寫,並解決了這個問題,但是在我的作業中,我必須以這種方式打印矩陣。

幫助?我究竟做錯了什麼?

+3

調用'a.randomMatrix(4,4,-3,5);'返回一個'FullMatrix'對象,但是您沒有使用返回值,所以它只是被丟棄。做這樣的事情:'FullMatrix a = FullMatrix.randomMatrix(4,4,-3,5);'。 – Jesper

+2

你正在調用一個實例的靜態方法。你是否意味着'FullMatrix a = FullMatrix.randomMatrix(4,4,-3,5)'的意思? – Kevin

+2

'toString'似乎不是你的問題。 –

回答

1

您不能使用對象調用靜態方法,因爲它沒有意義。

矩陣aresultMatrix是兩個獨立的對象。要獲得一個隨機矩陣,請致電:

Matrix m = FullMatrix.randomMatrix(...);