2017-01-12 49 views
0

我有一个关于这个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); 
+2

注释是误导性的,'(X + Y)%2 === 0'意味着“如果的剩余x + y除以2为零“。 –

回答

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 === 0true如果a是偶数(这就是余下运算符%)如何工作。

因此((x + y) % 2 === 0)意味着一个白色的正方形。例如

+1

此外,还有一个致命错字:for(var x = 0; y sinisake

+0

@Bathsheba所以根据我的理解,如果'x'和'y'的总和甚至等于'4',那么白色方块就会放在棋盘上。我觉得有点困惑的是,我需要检查它是否是'==='到'0' – roygbiv

+0

'=== 0'正在检查左边的位是否是* even *。 – Bathsheba

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 

实际上,它们是相同的,你已经有了一个国际象棋板

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

Consise版本循环:

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