有很多方法可以解決這個問題,並且您已經看到了一個逐行繪製圖片的答案。
我打算假設你已經有例程創建char[][]
並將該數組數組中的字符打印到屏幕上。它看起來好像你已經有了一個setPoint()
的方法,來捅一個點到結構中。
作爲初學者,我認爲它不會幫助您獲得解決方案。你需要指出正確的方向來解決它自己。
許多經驗豐富的編碼員現在使用測試驅動設計,您可以從中學習:從一個簡單的案例開始,爲其創建一個測試,使測試通過,重複更多測試,直到沒有更多測試寫入。最終你應該學習像jUnit這樣的測試框架,但現在你可以通過運行你的程序來「測試」。所以第一個測試是,它是否適用於height == 1
?
您可以通過這個測試(對於現在的手段,運行該程序並看到輸出看起來右):
public void drawTriangle(int height) {
drawing.setPoint(0,5,'*')
}
完成任務。
現在使它成爲height==2
工作:
public void drawTriangle(int height) {
drawing.setPoint(0,5,'*');
if(height == 2) {
drawing.setPoint(1,4,'*');
drawing.setPoint(1,5,'*');
drawing.setPoint(1,6,'*');
}
}
這仍然適用於height == 1
,但也適用於height == 2
。
但是你可以立即看到一個循環的機會來替換第二行的這三個命令。所以:
public void drawTriangle(int height) {
drawing.setPoint(0,5,'*');
if(height == 2) {
for(int 4; i<7; i++) {
drawing.setPoint(1,i,'*');
}
}
}
...你可以拉他們趕出的方法:
public void drawTriangle(int height) {
drawing.setPoint(0,5,'*');
if(height == 2) {
drawRow2();
}
}
private void drawRow2() {
for(int 4; i<7; i++) {
drawing.setPoint(1,i,'*');
}
}
這就是所謂的重構 - 寫一些作品,但是沒有寫入的最佳方式,對其進行測試以確保它能夠正常工作,然後逐步改變它的編寫方式,所以它仍然有效,但是方式更加整潔。
希望你可以看到這是怎麼回事。您可以將drawRow2()
更改爲更一般的 - drawRow(int rowNumber)
,並逐漸用rowNumber
中的變量替換其中的文字數字。然後您可以使用drawRow(0)
繪製第一行,並使用drawRow(1)
繪製第二行。然後,您可以通過添加drawRow(2)
來繪製三排三角形,然後您可以改用循環來代替。
你期待什麼輸出? – bradimus
@bradimus我更新了它 –
除非h <= 0,否則永遠不會進入while循環,如果是的話,也不會輸入for循環。 – dogwin