这个for循环如何制作一个8x8的板
How this for loop makes a 8x8 board?
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"循环做(我想了解它的行为)。据我所知,这两个循环创建了一个二维坐标系,第一个循环覆盖y轴,第二个覆盖x轴。我明白下面的代码块是如何工作的。
{
if ((x + y) % 2 == 0)
board += " ";
else
board += "#";
}
我不明白第二个for循环如何覆盖x轴。我开始阅读雄辩的javascript,这个问题是作为一个练习。它提供了一个关于嵌套循环的简短信息,但没有这么复杂。我搜索了以前的答案,但没有得到关于这个的信息。任何帮助吗?
"观察"变量的变化可以让您更好地了解程序是如何工作的:
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();
th {
height: 20px;
width: 20px;
border: 1px solid gray;
}
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>
基本的编程知识告诉我们,for循环只是一种将变量的值调整一定次数的方法。在你的例子中,你基本上是从0开始"计数",并增加y
,直到它大于size。
所以第二个"嵌套的"for循环基本上采用了这个非常简单的概念并对其进行了扩展。所以对于每一个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
变为size-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
的结果是奇数。无论当前的行或列如何,这种模式在整个棋盘上继续。
因此,你也可以判断任意棋盘上的任何正方形是空的还是有数字符号。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 使用javascript将动态表从一个html页面打印到另一个html页
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 表追加而不附加最后一个元素
- 我如何找到一个句子中的所有空格并替换忽略它们
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 使用类从一个标记中双击事件
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 我应该如何从xml文件构建一个javascript页面
- 当我的8x8表中的任何链接被单击时,我如何运行一个函数
- 这个for循环如何制作一个8x8的板