JavaScript算法生成国际象棋棋盘8x8网格模式

时间:2016-05-29 11:31:05

标签: javascript

我正在尝试编写一个程序来创建一个代表8×8网格的字符串,使用换行符分隔行。在网格的每个位置处都有空格或“#”字符。角色应该成为棋盘。

将此字符串传递给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);
}

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

2 个答案:

答案 0 :(得分:1)

删除循环末尾的分号:

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

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

使用分号,引擎将执行以下操作:

  1. 在括号内的'for'之后运行内容 - i之后将为10
  2. 大括号内的内容将一次后执行
  3. 如果添加换行符,则显而易见

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

    花括号不是for的主体,而是一个新的块。

答案 1 :(得分: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);
}