我对这个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);
答案 0 :(得分:1)
除了误导性评论之外,代码中还有一些拼写错误:
boardSize += ' ';
应为boardString += ' ';
和
(var x = 0; y < boardSize; x++)
应为(var x = 0; x < boardSize; x++)
如果您根据每个方格x
和y
的值来考虑棋盘(使用符号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
你想要的是交替的黑白方块。从上面你可以看到,如果x
和y
的总和是偶数,则正方形是白色,如果是奇数则是黑色。
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
语句被视为白色方块,因为x
和y
的总和是偶数。
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]