使用两个嵌套的FOR循环绘制未绘制的8x8网格的最后一个方格

时间:2013-07-10 19:35:57

标签: java

我无法理解为什么我的代码无效。这应该显示一个8x8,but the last square doesn't get drawn的棋盘格!知道为什么吗?

我搜索过以前是否曾经问过这个问题,但没有发现任何问题。提前谢谢!

代码:

/*
* File:CheckerBoard.java
* ----------------------
*/

import acm.graphics.*;
import acm.program.*;

public class CheckerBoard extends GraphicsProgram {
int row, column, x, y;

    public void run() {

        // Checkerboard
        for (row = 0; row < 8; row++) {
            for (column = 0; column < 8; column++) {
                // x, y, x width, y width
                add(new GRect(x, y, 50, 50));
                x = column * 50;
                y = row * 50;
            }
        }
    }
}
BTW:我正在阅读的书要求我使用两个嵌套for循环(“Java的艺术和科学”,第4章,练习11,CS-106a)

3 个答案:

答案 0 :(得分:7)

在绘制矩形之前,您需要设置xy。否则,最后一个矩形不会显示:

for (row = 0; row < 8; row++) {
    for (column = 0; column < 8; column++) {
        x = column * 50;
        y = row * 50;
        // x, y, x width, y width
        add(new GRect(x, y, 50, 50));
    }
}

更好的是,完全删除xy,并直接使用计算:

for (row = 0; row < 8; row++) {
    for (column = 0; column < 8; column++) {
        add(new GRect(column * 50, row * 50, 50, 50));
    }
}

答案 1 :(得分:0)

在设置x和y之后放置draw语句

答案 2 :(得分:0)

由于所有变量仅在run()方法中使用,因此它们应在本地声明为该方法而不是成员字段。遵循此建议将帮助您找到错误,因为编译器会抱怨xy未初始化。作为一般经验法则,您应该尽可能地将变量声明并初始化为首次使用代码。