1

我无法理解为什么我的代码不起作用。这应该显示一个 8x8 的棋盘格,但最后一个正方形没有被绘制!知道为什么吗?

我搜索了是否以前有人问过这个问题,但没有找到任何东西。提前致谢!

代码:

/*
* 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;
            }
        }
    }
}

顺便说一句:我正在阅读的书要求我使用两个嵌套的 for 循环(“Java 的艺术与科学”,第 4 章,练习 11,CS-106a)

4

3 回答 3

7

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

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));
    }
}
于 2013-07-10T19:37:57.847 回答
0

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

于 2013-07-10T19:39:52.337 回答
0

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

于 2013-07-10T19:40:36.987 回答