金字塔练习java并不完美对齐

时间:2017-07-23 07:30:15

标签: java algorithm

  

编写一个绘制金字塔组成的GraphicsProgram子类   砖排列成水平排,这样的数量   当你向上移动金字塔时,每行中的砖块减少一个

这是我的代码:

import acm.graphics.GRect;
import acm.program.GraphicsProgram;

public class Pyramid extends GraphicsProgram {
public void run() {

    int BRICK_WIDTH = 30;
    int BRICK_HEIGHT = 12;
    int BRICKS_IN_BASE = 20;

    for (int i = 1; i <= BRICKS_IN_BASE; i++) {
        for (int j = 1; j <= i; j++) {

            add(new GRect(this.getCanvasWidth() / 16 + (BRICK_HEIGHT * i)
                    + BRICK_WIDTH + (BRICK_WIDTH * (BRICKS_IN_BASE - j)),
                    BRICK_HEIGHT * i, BRICK_WIDTH, BRICK_HEIGHT));

        }

    }

}
}

如果BRICK_WIDTH为30且BRICK_HEIGHT为12,则金字塔未完全对齐, 但如果brick_width为30且brick_height为15,则完全对齐。

如果BRICK_WIDTH为30且BRICK_HEIGHT为12 enter image description here,则为金字塔的屏幕截图 这是金字塔的截图,如果BRICK_WIDTH为30且BRICK_HEIGHT为15 enter image description here

1 个答案:

答案 0 :(得分:0)

使用BRICK_HEIGHT确定GRect的x坐标听起来不合逻辑。

您需要更改行

add(new GRect(this.getCanvasWidth() / 16 + (BRICK_HEIGHT * i)

add(new GRect(this.getCanvasWidth() / 16 + (BRICK_WIDTH / 2 * i)

如果BRICK_HEIGHT等于15而BRICK_WIDTH为30则有效,因为BRICK_HEIGHT * i == (BRICK_WIDHT / 2 * i)

但一般情况下,您希望绘制当前线的基本x坐标基于砖块的宽度,而不是基于高度。