我无法理解这段代码如何绘制完整的棋盘而不仅仅是8个方块
特别是:for-loop
如何运作。
import acm.program.*;
import acm.graphics.*;
public class chbord extends GraphicsProgram {
/* number of columns */
private static final int Ncolumns = 8;
/* number of rows*/
private static final int Nrows = 8;
public void run() {
int sqSize = getHeight() / Nrows;
for (int i = 0; i < Nrows; i++) {
for (int j = 0; j < Ncolumns; j++) {
int x = j * sqSize;
int y = i * sqSize;
GRect sq = new GRect(x, y, sqSize, sqSize);
sq.setFilled(((i + j) % 2) != 0);
add(sq);
}
}
}
}
答案 0 :(得分:2)
循环中有一个循环:
for (int i = 0; i < Nrows; i++) {
for (int j = 0; j < Ncolumns; j++)
每个循环有8次迭代:
/* number of columns */
private static final int Ncolumns = 8;
/* number of rows*/
private static final int Nrows = 8;
通过内循环进行64次迭代(8 x 8) - 每个国际象棋方格一次。
答案 1 :(得分:1)
虽然上面的两个海报都是正确的,但考虑到第二个循环每次运行8次,第一个循环运行。演示在每个循环中放置两个不同的System.out.println语句并查看它们的打印顺序。
答案 2 :(得分:1)
外环第一次运行时,内环完全运行(8次)。然后外循环再次运行,然后内循环再次完全运行(另外8次)。
这将持续到第八行。
因此您绘制了8行,但每行绘制为8列。
结果:绘制了所有64个方格。
特别是:它是如何for循环的。
For循环是编程的关键部分。以下是一些解释性文章:
答案 3 :(得分:0)
这是因为实际上有两个for循环,而不仅仅是一个循环。这称为“嵌套”循环,它是用于创建行x列网格(如棋盘)的典型方法。
答案 4 :(得分:0)
这是一个嵌套循环的例子 - 一个循环在另一个循环中。外部循环使得它包含的代码对于i的值在0和nrows-1之间执行,包括0和nrows。内部循环使得它包含的代码可以在0和ncols - 1之间的j值中执行。由于内部循环中的代码是针对i的n个值执行的,并且对于i的这些值中的每一个,m值为j,所以执行的总数是nm。
答案 5 :(得分:0)
外部和内部循环将创建一个NRows * NColumns网格,模数运算符(%)将为每个其他正方形着色,因为MOD 2只有两个值。