Java 需要帮助理解绘制棋盘的代码吗
本书使用此代码绘制棋盘。我唯一的问题是理解棋盘上各个方块的绘制顺序。当我进行计算时,它只在从左上到右下的对角线方向上用正方形填充棋盘。书中说代码对每一个方块循环64次,但我不确定它是如何循环64次的 例如,让我们假设getHeight()=72Java 需要帮助理解绘制棋盘的代码吗,java,Java,本书使用此代码绘制棋盘。我唯一的问题是理解棋盘上各个方块的绘制顺序。当我进行计算时,它只在从左上到右下的对角线方向上用正方形填充棋盘。书中说代码对每一个方块循环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(1
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;
}
导入acm.program.*;
导入acm图形。*;
公共类棋盘扩展图形程序{
公开募捐{
double sqSize=(double)getHeight()/N_行;
对于(int i=0;i
您有两个循环-第二个循环通过每个值0-7循环,总共循环8次,因为这是第一个循环运行的次数。在您的解释中,您似乎同时递增两个值,就好像只有一个循环每次递增两个值一样
在循环中打印i和j的值可能会有所帮助
(i,j)
(0, 1) (0, 2) (0, 3) ...
(1, 1) (1, 2) (1, 3) ...
...
这是正确的吗?内部循环完成,然后其他循环上升一个值,内部循环使用新的x值再次运行?@JessicaM:是的,第一个循环将执行括号中的所有内容8次。大括号内是另一个循环,因此第二个循环将执行8次;每一次,第二个循环中的j也将从0到7。伯特的回答和建议都很好。快速提问。内部循环如何确定要更改的值。x是外环而y是内环的信号是什么?使用变量
j
的for循环位于使用变量i
的for循环的花括号内。这些变量通过行double y=i*sqSize分配给x
和y
代码>和双x=j*sqSize代码>同样,您可以移动行双y=i*sqSize代码>在内部循环之外-i
每次都是相同的值,因此每次都在进行不必要的计算。