2012-10-20 36 views
0

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

例如让我们说的getHeight()= 72

sqSize = 9

在最内层循环移动
双X = 0 * 9 ===> 0
双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);

等等

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-7第二个循环周期,这样做一共有8次,因为这是多少次的第一循环运行。在你的解释中,你会同时增加两个值,就像每次只有一个循环增加两个值一样。

在您的循环内打印ij的值可能会有帮助。

(i,j) 

(0, 1) (0, 2) (0, 3) ... 
(1, 1) (1, 2) (1, 3) ... 
... 
+0

这是正确的吗?内部循环完成后,其他循环上升一个值,内部循环再次运行一个新的X值? –

+0

@JessicaM:是的,第一个循环将执行8次大括号中的所有操作。在大括号内是另一个循环,所以第二个循环将被执行8次;每次,第二个循环中的j也会从0-7变为0。伯特的回答和建议都很好。 – arcy

+0

快速问题。内部循环如何确定要更改哪个值。 x是外部循环而y是内部循环的信号是什么? –