2012-11-14 117 views
0

我有幾個關於使用嵌套for循環的問題。在本書中的示例中,它使用嵌套循環來繪製典型的棋盤格。
使用嵌套for循環繪製棋盤

1)我的理解是正確的,當我假設下面的代碼說繪製棋盤格的順序將從左到右垂直向下,直到整個棋盤被繪製?

2)我有一些關於double x和double y在最內部for循環中的用途的問題。他們計算的目的是將一個方格與下一個方格相隔?你能擴展雙x和雙y的目的嗎?一個循環的每個週期會發生什麼?

import acm.program.*; 
import acm.graphics.*; 




public class checkerBoard extends GraphicsProgram{ 
    public void run(){ 


     double sqSize = 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 rect = new GRect(x, y, sqSize, sqSize); 
       rect.setFilled((i+ j) % 2 !=0); 
       add(rect); 

      } 

     } 

    } 


    private static final int N_ROWS = 8; 
    private static final int N_COLUMNS = 8; 


} 

回答

0

1)我的理解是正確的,當我想下面的代碼繪製說棋盤方格的 順序將是垂直向下 由左到右,直到整個棋盤繪製?

這是正確的。逐行,從左到右,從上到下。

2)我對double x和double y 的目的有些疑問,它們位於最內部的for循環中。他們是否計算了將一個方格間隔到下一個方格的目的?你可以擴大雙倍x和雙倍y的 目的,以及一個 循環的每個週期發生了什麼?

它們是繪製下一個正方形的位置座標。具體來說,它們是廣場左上角的座標。您可以通過簡單地乘以正方形的寬度來計算出所有方塊的起點,就像他們所做的一樣。