有很多方法可以解决这个问题,并且您已经看到了一个逐行绘制图片的答案。
我打算假设你已经有例程创建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