棋盘字符串

时间:2017-01-12 08:41:33

标签: javascript for-loop

我对这个JS代码如何在字符串中生成棋盘有疑问。我不确定if语句中的条件是如何正常工作的。

x + y %除以2 ===0是一个评估为true的条件。我有点困惑的是它如何评估为真?可以多用一点解释。

var boardSize = 8;
var boardString = '';
// loops to calc y and x axis hash placement
for (var y = 0; y < boardSize; y++){
    for (var x = 0; x < boardSize; x++) {
        // x + y divided by 2 is === to 0
        if ((x + y) % 2 === 0){
            // true add hashes to string
            boardString += ' ';
        } else {
            boardString += '#';
        }
    }
    // newline for each set of hashes
    boardString += '\n';
}
console.log(boardString);

4 个答案:

答案 0 :(得分:1)

除了误导性评论之外,代码中还有一些拼写错误:

boardSize += ' ';应为boardString += ' ';

(var x = 0; y < boardSize; x++)应为(var x = 0; x < boardSize; x++)

如果您根据每个方格xy的值来考虑棋盘(使用符号y,x);

0,0 0,1 0,2 ... 0,7
1,0 1,1 1,2 ... 1,7
2,0 2,1 2,2 ... 2,7
 .   .   .
 .   .   .
 .   .   .
7,0 7,1 7,2 ... 7,7

你想要的是交替的黑白方块。从上面你可以看到,如果xy的总和是偶数,则正方形是白色,如果是奇数则是黑色。

如果a % 2 === 0为偶数(<余数运算符true的工作方式),

a%

因此((x + y) % 2 === 0)意味着白色方块。

答案 1 :(得分:1)

作为任何坐标,例如;

          n-1,m
n,m-1     n,m     n,m+1
          n+1,m

计算总和

          n+m-1
n+m-1     n+m     n+m+1
          n+m+1
然后我们做%2

      1                         0
1     0     1      or     0     1     0
      1                         0 

扩展它

1 0 1 0 1 0 1               0 1 0 1 0 1 0
0 1 0 1 0 1 0               1 0 1 0 1 0 1
1 0 1 0 1 0 1       or      0 1 0 1 0 1 0     
0 1 0 1 0 1 0               1 0 1 0 1 0 1
1 0 1 0 1 0 1               0 1 0 1 0 1 0
实际上,他们是一样的,你有一个棋盘

答案 2 :(得分:0)

因此if语句被视为白色方块,因为xy的总和是偶数。

var boardSize = 8;
var boardString = '';
// loops to calc y and x axis hash placement
// think of x and y as white and black squares
// white square = x and y are even. black square = odd.
for (var y = 0; y < boardSize; y++){
    for (var x = 0; x < boardSize; x++) {
        // x + y is true if the remainder of the division is even
        // even = a white square
        if ((x + y) % 2 === 0){
            // true add hashes to string
            boardString += ' ';
        } else {
            boardString += '#';
        }
    }
    // newline for each set of hashes
    boardString += '\n';
}
console.log(boardString);

答案 3 :(得分:0)

Consise版本的循环:

for (var y = 0; y < boardSize; y++)
  for (var x = 0; x < boardSize; x++)
     boardString += ' #'[(x+y) % 2]