嵌套循环javascript棋盘
nested for loop javascript chess board
我正在努力理解javascript,但我不明白为什么这不能作为javascript雄辩的书中提到的棋盘任务的嵌套循环工作。我知道解决方案以及如何做到这一点,但我只是想知道为什么下面显示的代码不起作用。如果有人能解释一下的话。我希望从这段代码中得到的是,制作一个棋盘,但它显然输出错误。所以,再一次,我不需要一个棋盘的解决方案,只需要解释为什么这不起作用。我原以为,var board在第一次if语句为true时会被空字段填充,如果为false,它会得到#。此外,直到var x为9,语句x%(width-1)==0变为true,它才会进入新行。但产出并不像预期的那样。这是代码:
var height = 8;
var width = 10;
var board = "";
for (var y = 0; y < height; y++) {
for (var x = 0; x < width; x++) {
if ((x + y) % 2 == 0){
board += " ";
}
else if(x%(width-1) == 0){
board += "'n";
}
else{
board += "#";
}
}
}
console.log(board);
您可以将其作为嵌套循环来执行,但输出不正确的原因是您的逻辑有缺陷。
原因1:当x也是0(初始化状态)时,实际上会得到x%(width-1)===0,所以每个内部循环会触发两次。
原因2:对于每个奇数值,也会出现在x%(width-1)===0(每个内环再次发生两次)的点上,通常会有一个"#",现在有一个
如果您通过将else-If语句更改为:来解决此问题
if(x%(width-1) === 0 && x>0){
board += "'n";
}
并将其移动到内环的最后一部分,这将起作用。然而,我喜欢将"添加"移到外循环中,这样你就完全不需要担心这个逻辑了。如果你担心换行符没有出现在棋盘之前(或之后,取决于你的编码方式),那么你可以对换行符添加进行y>0检查:
var height = 8;
var width = 10;
var board = "";
for (var y = 0; y < height; y++) {
if(y>0) board += "'n";
for (var x = 0; x < width; x++) {
if ((x + y) % 2 == 0){
board += " ";
} else {
board += "#";
}
}
}
console.log(board);
您的问题是(x+y)%2==0和x%(width-1)==0(或者,更简单地说,x==width-1的值)可以同时为true,那么哪个条件检查应该优先于另一个条件检查?
例如,
如果x==9,y==7,则
(9+7)%2==0
因此,您应该首先根据x的宽度边界测试x,以获得所需的输出;也就是说,我会尝试这个,而不是:
for (var y = 0; y < height; y++) {
for (var x = 0; x < width; x++)
{
if (x == width - 1) {
board += "'n";
} else if ((x + y) % 2 == 0){
board += " ";
}
else {
board += "#";
}
}
}
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- Javascript中的国际象棋棋盘制造商.代码有效.但是它是如何工作的
- 使用javascript填充棋盘棋子
- 嵌套循环javascript棋盘
- 如何在多迪姆数组中放置值 - 就像棋盘上的 6 个皇后 - javascript
- Javascript棋盘打印
- JavaScript”;交错棋盘”;
- 用Javascript在棋盘上绘制箭头
- 棋盘游戏在javascript中,同步问题卡
- JavaScript棋盘程序
- 无法在javascript棋盘中获得换行符
- 字符串连接-雄辩的javascript象棋棋盘
- 使用Javascript/HTML5制作2D棋盘的最佳/最简单方法
- 介绍性JavaScript棋盘打印程序给我带来了问题
- 在没有画布的html / javascript中制作棋盘