我有一個任務來練習我的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重寫,並解決了這個問題,但是在我的作業中,我必須以這種方式打印矩陣。
幫助?我究竟做錯了什麼?
調用'a.randomMatrix(4,4,-3,5);'返回一個'FullMatrix'對象,但是您沒有使用返回值,所以它只是被丟棄。做這樣的事情:'FullMatrix a = FullMatrix.randomMatrix(4,4,-3,5);'。 – Jesper
你正在調用一個實例的靜態方法。你是否意味着'FullMatrix a = FullMatrix.randomMatrix(4,4,-3,5)'的意思? – Kevin
'toString'似乎不是你的問題。 –