在控制台中使用javascript构建棋盘

时间:2017-01-13 19:50:56

标签: javascript

我是用滔滔不绝的javascript做这个问题的,它应该像这样打印

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

但似乎无法解决如何交替行。到目前为止,我刚刚提出了网格。

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

使用此代码

var hash = ''
var size = 8


for (var i = 0; i < size; i++) {
    for (var j = 0; j < size; j++) {
        hash.charAt(hash.length-1) === '#' ? hash += ' ': hash += '#'
    }
    hash += '\n'
} 
console.log(hash)

他们用来回答问题的代码就是这个

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);

但我确信有一种方法可以使用我的代码。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你应该在奇数/偶数行之间做出区别。你可以通过查看行索引和列索引的总和来做到这一点:如果其中一个是奇数,则产生一个哈希,否则就是一个空格:

var hash = ''
var size = 8

for (var i = 0; i < size; i++) {
    for (var j = 0; j < size; j++) {
        (i + j) % 2 ? hash += '#': hash += ' '
    }
    hash += '\n'
} 
console.log(hash)

请注意,您可以将分配移出三元运算符:

        hash += (i + j) % 2 ? '#' : ' '

但老实说,建议不要继续添加字符串,因为在JavaScript字符串中是不可变的,所以你真的用每个+=操作创建一个新字符串。

我建议使用这个ES6代码:

var hash = ''
var size = 8

hash = Array.from(Array(size), (_, i) =>
  Array.from(Array(size), (_, j) =>
     (i+j)%2 ? '#' : ' '
  ).join('')
).join('\n');

console.log(hash)

答案 1 :(得分:0)

您需要识别偶数行并在字符串的开头插入一个额外的空格。

// Identify the even row and add an Extra space if( i % 2 === 0) { hash+= ' '}

以下代码应该产生预期的输出。

&#13;
&#13;
var hash = ''
var size = 8
                 
for (var i = 0; i < size; i++) { 
            
    // Identify the even row and add an Extra space
    if( i % 2 === 0) { hash+= ' '}

    for (var j = 0; j < size-1; j++) {
        hash.charAt(hash.length-1) === '#' ? (hash += ' '):  (hash += '#')
     }
     hash += '\n'
  } 
console.log(hash)
&#13;
&#13;
&#13;