2017-01-12 4 views
0

このJSコードがどのようにしてチェス盤を文字列に生成するのかという質問があります。 ifステートメントの状態がどのように正確に機能しているかわかりません。 2で割っチェス盤の文字列

x + y%===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 === 0は、aが偶数の場合(これは剰余演算子%の仕組みです)、trueです。

したがって、((x + y) % 2 === 0)は、白い四角を意味します。

+1

また、(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 

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 

は、実際に、彼らは同じであり、あなたがチェスを持って展開

  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 

を行う合計を計算ボード

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]

関連する問題