我欣赏的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