var size = 8;
var board = "";
for (var y = 0; y < size; y++) {
for (var x = 0; x < size; x++) {
if ((x + y) % 2 == 0)
board += " ";
else
board += "#";
}
board += "\n";
}
console.log(board);
现在我明白这会创建一个8x8的主板。我在理解第二个“for”循环的方式和内容方面有问题(我想了解它的行为)。 据我所知,这2个循环创建了一个2D坐标系,第一个环用于覆盖y轴,第二个用于覆盖x轴。我理解以下块的工作原理。
{
if ((x + y) % 2 == 0)
board += " ";
else
board += "#";
}
我不明白第二个for循环是如何覆盖x轴的。 我开始阅读雄辩的javascript,这个问题是作为练习给出的。它提供了有关嵌套循环的简短信息,但没有给出这种复杂性。 我搜索了以前的答案,但没有得到有关此信息。有什么帮助吗?
答案 0 :(得分:2)
&#34;观看&#34;变量的变化可能会让你对程序的运作方式有更好的感受:
var prog= [],
table= document.querySelector('table'),
sx= document.getElementById('x'),
sy= document.getElementById('y'),
smod= document.getElementById('mod');
function display(x, y, c) {
prog.push([x,y,c]);
}
function runProgram() {
var p= prog.shift();
if(p) {
var x= p[0], y= p[1], c= p[2], mod= (x+y) % 2;
sx.innerHTML= x;
sy.innerHTML= y;
smod.innerHTML= mod;
table.rows[y].cells[x].innerHTML= c;
setTimeout(runProgram, 200);
}
}
var size = 8;
var board = "";
for (var y = 0; y < size; y++) {
for (var x = 0; x < size; x++) {
if ((x + y) % 2 == 0) {
board += " ";
display(x, y, ' ');
}
else {
board += "#";
display(x, y, '#');
}
}
board += "\n";
}
console.log(board);
runProgram();
&#13;
th {
height: 20px;
width: 20px;
border: 1px solid gray;
}
&#13;
y= <span id="y"></span><br>
x= <span id="x"></span><br>
(x+y) % 2 = <span id="mod"></span>
<table>
<tr><th><th><th><th><th><th><th><th></tr>
<tr><th><th><th><th><th><th><th><th></tr>
<tr><th><th><th><th><th><th><th><th></tr>
<tr><th><th><th><th><th><th><th><th></tr>
<tr><th><th><th><th><th><th><th><th></tr>
<tr><th><th><th><th><th><th><th><th></tr>
<tr><th><th><th><th><th><th><th><th></tr>
<tr><th><th><th><th><th><th><th><th></tr>
</table>
&#13;
答案 1 :(得分:1)
考虑这个真值表,它显示了添加两个整数的偶数/奇数结果:
| X is even | Y is even | X + Y is even | Write a space?
| F | F | T | T
| T | F | F | F
| F | T | F | F
| T | T | T | T
因此从位置(0,0)开始,内部循环将写入一个空格。然后考虑下一行,(0,1) - 内部循环会写一个数字符号,因为1 + 0
的结果是奇数。无论当前行或列如何,整个电路板的模式都会继续。
因此,您还可以判断任意板上的任何方块是空的还是具有数字符号。
答案 2 :(得分:1)
基本的编程知识告诉我们,for循环只是一种调整变量值一定次数的方法。在你的情况下,你基本上是&#34;计数&#34;从零开始并递增y
直到它大于大小。
所以第二个,"nested" for loop基本上采用这个非常简单的概念并对其进行扩展。因此,对于外部循环y
的每{{}}次迭代,将从x
开始并转到0
。
考虑这个修改过的代码示例:
size-1
生成此输出:
for (var y = 0; y < size; y++) {
for (var x = 0; x < size; x++) {
board += " " + (size * y + x);
}
board += "\n";
}
通过这种方式,变量0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
和x
似乎被恰当地命名。对于每一行y
,y
将从x
变为0
。
希望这是有道理的!