我正在开发一个应该打印金字塔的程序。金字塔的底座是14个街区。块是(30,12)像素。将打印金字塔的小程序的尺寸为(800,400)。基本块从(100,380)开始。我想如果我复制那个块并在x方向上移动30个像素14次,我将完成基础。我很难做到这一点。我用循环复制并移动块但不起作用。 我究竟做错了什么?
import acm.graphics.GRect;
import acm.program.*;
public class Pyramid extends GraphicsProgram
{
public static final int BRICK_WIDTH = 30;
public static final int BRICK_HEIGHT = 12;
public static final int BRICK_IN_BASE = 14;
public void run()
{
setSize(800,400);
GRect rec = new GRect (100,380,BRICK_WIDTH,BRICK_HEIGHT);
for (int i = 0; i<14; i++)
{
rec.move(30,0);
add(rec);
}
}
}
答案 0 :(得分:1)
查看for循环中的条件。当i
大于14时,你告诉编译器太循环,这永远不会成立。
也请更改i < 14
。
答案 1 :(得分:1)
程序中只有一个矩形。 add()
方法多次添加同一个对象;你需要每次都创建一个新的。
答案 2 :(得分:0)
你需要改变你的for循环条件,我永远不会大于14,应该小于。
此外,您应该制作一个新的Grect,并且只需将每个新的x值更改为30
import acm.graphics.GRect;
import acm.program.*;
public class Pyramid extends GraphicsProgram
{
public static final int BRICK_WIDTH = 30;
public static final int BRICK_HEIGHT = 12;
public static final int BRICK_IN_BASE = 14;
public void run()
{
setSize(800,400);
int x = 100;
int y = 380;
for (int i = 0; i<14; i++)
{
GRect rec = new GRect (x, y,BRICK_WIDTH,BRICK_HEIGHT);
x += BRICK_WIDTH;
add(rec);
}
}
}
答案 3 :(得分:0)
你不是在重复它,你只是移动它。请尝试以下方法:
public void run() {
setSize(800,400);
int x=100, y=380;
GRect rec;
for (int i = 0; i<BRICK_IN_BASE; i++) {
rec = new GRect (x, y, BRICK_WIDTH, BRICK_HEIGHT);
add(rec);
x += BRICK_WIDTH;
}
}