本书使用此代码绘制棋盘格。我唯一的问题是理解在棋盘上绘制单个正方形的顺序。当我进行计算时,它只在棋盘上用从左上角到右下角的对角线方向填充方块。这本书说代码为每个方块做了64次这个循环,但我不确定它是如何做到这64次。
例如,假设getHeight()= 72
sqSize = 9
在最内圈循环中移动
double x = 0 * 9 ===> 0
double y = 0 * 9 ===> 0
GRect(0,0,9,9,);
double x = 1 * 9 ===> 9
double y = 1 * 9 ===> 9
GRect(9,9,9,9,);
double x = 2 * 9 ===> 18
double y = 2 * 9 ===> 18
GRect(18,18,9,9);
等...
import acm.program.*;
import acm.graphics.*;
public class Checkerboard extends GraphicsProgram {
public void run(){
double sqSize = (double) getHeight() / N_ROWS;
for ( int i = 0; i < N_ROWS; i++ ){
for( int j = 0; j < N_COLUMNS; j++) {
double x = j * sqSize;
double y = i * sqSize;
GRect sq = new GRect(x, y, sqSize, sqSize);
sq.setFilled(( i + J ) % 2 !=0);
}
}
}
private static final int N_ROWS = 8;
private static final int N_COLUMNS = 8;
}
答案 0 :(得分:0)
你有两个循环 - 第二个循环遍历每个值0-7,并且总共循环8次,因为这是第一个循环运行的次数。在您的解释中,您正在同时递增两个值,就好像每次只有一个循环使两个值递增一样。
在循环中打印 i 和 j 的值可能会有所帮助。
(i,j)
(0, 1) (0, 2) (0, 3) ...
(1, 1) (1, 2) (1, 3) ...
...