0

本书使用此代码绘制棋盘格。我遇到的唯一问题是了解棋盘上各个方块的绘制顺序。当我进行计算时,它只会用从左上角到右下角的对角线方向的正方形填充棋盘。这本书说代码对每个正方形执行此循环 64 次,但我不确定它是如何执行 64 次的。

例如让我们说 getHeight() = 72

平方大小 = 9

在最里面的循环中移动
double x = 0 * 9 ===> 0
double y = 0 * 9 ===> 0
GRect (0, 0, 9, 9,);

双 x = 1 * 9 ===> 9
双 y = 1 * 9 ===> 9
GRect (9, 9, 9, 9,);

双 x = 2 * 9 ===> 18
双 y = 2 * 9 ===>18
GRect (18, 18, 9, 9);

ETC...

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; 
     }
4

1 回答 1

0

你有两个循环——第二个循环遍历每个值 0-7,总共循环 8 次,因为这是第一个循环运行的次数。在您的解释中,您似乎同时增加了两个值,就好像只有一个循环每次都增加两个值一样。

在循环中打印ij的值可能会有所帮助。

(i,j)

(0, 1) (0, 2) (0, 3) ...
(1, 1) (1, 2) (1, 3) ...
...
于 2012-10-20T00:55:52.180 回答