我无法理解为什么我的代码无效。这应该显示一个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)
答案 0 :(得分: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));
}
}
更好的是,完全删除x
和y
,并直接使用计算:
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()
方法中使用,因此它们应在本地声明为该方法而不是成员字段。遵循此建议将帮助您找到错误,因为编译器会抱怨x
和y
未初始化。作为一般经验法则,您应该尽可能地将变量声明并初始化为首次使用代码。