2016-05-29 35 views
0

我想写一个程序,它创建一个代表8×8网格的字符串,使用换行符来分隔线条。在网格的每个位置都有空格或“#”字符。角色应该形成一个棋盘。JavaScript算法来生产国际象棋棋盘8x8网格模式

传递这个字符串console.log应显示是这样的:

# # # # 
# # # # 
# # # # 
# # # # 
# # # # 
# # # # 
# # # # 
# # # # 

当你产生这种模式的程序,定义一个变量size = 8和更改程序,使其工作于任何大小,输出给定宽度和高度的网格。

var hash = "#"; 
var space = ' '; 
var size = 8; 

for (var x = 1; x <= size; x++); { 
    var line = ' '; 

    for (var y = 1; y <= size; y++); { 
    if (x % 2) { 
     if (y % 2) { 
     line = line + space; 
     } else { 
     line = line + hash; 
     } 
    } else { 
     if (y % 2) { 
     line = line + hash; 
     } else { 
     line = line + space; 
     } 
    } 

    } 

    console.log(line); 
} 

我无法弄清楚为什么这不工作... :(

+0

'var line ='';'< - 在开始处创建一个空白空间。它是如何工作的,输出或错误是什么? – coyotte508

+2

你的循环中有一个尾随的分号,意味着它们没有执行:'for(var x = 1; x <= size; x ++);' –

+0

是的,分号就是它。谢谢!另外,空间!甚至没有考虑它。 –

回答

1

在你的循环的末尾删除分号:

for (var x = 1; x <= size; x++) { 
    var line = ' '; 

    for (var y = 1; y <= size; y++) { 

有了分号,发动机将做到以下几点:

  1. 运行的东西后“的”括号内 - i将在10之后
  2. 花括号内的大括号将执行一次之后

如果添加换行,可以很明显

for (var i = 0; i < 10; i++); 
{console.log(i);} 

大括号不属于为体,而是一个新的块。

+0

D'oh!感谢您的答复! –

0

请确保您删除; - 在for循环的前S,因为你for循环是不正常执行括号里面的逻辑(代码将只运行一次):

像这样的事情会做你想要什么:

var size = 8;  
 
for (var y = 0; y < size; y++) { 
 
    var line = ' '; 
 

 
    for (var x = 0; x < size; x++) { 
 
     line += (y + x + 1) % 2 ? ' ': '#'; 
 
    } 
 

 
    console.log(line); 
 
}

+0

你能告诉OP他出错了吗? (额外的分号)。否则这个答案是无用的。 – coyotte508

+0

为什么OP应用这个功能?你解决了这个问题,但由于你没有解释任何问题,所以答案不能帮助OP理解这个问题。 – DarkDust

+0

语法没有错,_behaviour_不是OP期望的。 – DarkDust