我欣賞的OP是一個新的Java,所以方法可能會被認爲是「先進」,但是我覺得它用這個問題來向您展示如何攻擊的價值問題通過分解成碎片。
讓我們想想寫一個方法來打印一行,告訴它是數線的方法:
public void printTriangleLine(int rowNumber) {
// we have to work out what to put here
}
我們要打印一些數量的空格,然後一些星數。看看這個例子,我可以看到(如果第一行是0),它是(5行號)空格和(2 * rowNumber + 1)個星號。
讓我們創造一個打印字符的行,我們的方法,並使用它:
public void printTriangleLine(int rowNumber) {
printSequence(" ", 5 - rowNumber);
printSequence("*", 2 * rowNumber + 1);
System.out.println();
}
這將無法編譯,直到我們實際編寫printSequence(),所以讓我們做到這一點:
public void printSequence(String s, int repeats) {
for(int i=0; i<repeats; i++) {
System.out.print(s);
}
}
現在你可以測試 printSequence本身,你可以測試 printTriangleLine在它自己。現在你可以嘗試一下通過直接調用這些方法在main()
public static void main(String [] args) {
printSequence("a",3);
System.out.println();
printTriangleLine(2);
}
...運行和驗證(用眼睛),它輸出:
aaa
*****
當你進一步進入編程,你會想要像使用jUnit一樣使用單元測試框架。除了打印,你會更容易寫的東西像printTriangleLine返回一個字符串(你會從更高的打印在你的程序),你將通過類似的命令自動化您的測試:
assertEquals(" *****", TriangleDrawer.triangleLine(2));
assertEquals(" *", TriangleDrawer.triangleLine(0))
現在我們有我們需要繪製一個三角形的作品。
public void drawTriangle() {
for(int i=0; i<5; i++) {
printTriangleLine(i);
}
}
我們寫的代碼比其他人給出的答案稍長一點。但是我們已經能夠測試每個步驟,並且我們有方法可以在其他問題中再次使用。在現實生活中,我們必須找到將問題分解爲太多方法或者太少的方法之間的適當平衡。我傾向於選擇很多很短的方法。
對於額外的信貸:
- 適應這一點,以便代替打印到System.out,該方法返回一個字符串 - 所以在你的main(),您可以使用
System.out.print(drawTriangle())
- 適應這一點,以便你可以問drawTriangle()的大小不同 - 也就是說,你可以撥打
drawTriangle(3)
或drawTriangle(5)
- 使它適用於更大的三角形。提示:您需要爲printTriangleLine()添加一個新的「寬度」參數。
在這裏你可以找到你的解決方案 - http://java4732.blogspot.in/2016/08/pyramid-programs-in-java.html – Umesh 2016-09-15 19:29:49