需要使用以下规则集创建一个棋盘:
编写一个程序,用于创建表示 8×8 网格的字符串,使用换行符分隔行。在网格的每个位置都有一个空格或"#"字符。角色应该组成一个棋盘。
将此字符串传递给控制台.log应显示如下内容:
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
这是我为它编写的代码:
var chessBoardSize = 8;
var chessBoard = " ";
var lineBreakCount = 0;
while (chessBoard.length <= chessBoardSize * chessBoardSize) {
lineBreakCount++;
if (lineBreakCount === chessBoardSize) {
chessBoard += "n";
lineBreakCount = 0;
}
if (chessBoard.slice(-1) === " ") {
chessBoard = chessBoard + "#";
} else if (chessBoard.slice(-1) === "#") {
chessBoard = chessBoard + " ";
}
}
console.log(chessBoard);
一旦在该行中使用了 8 个字符,我就无法将字符串放在新行上。这是我试图弄清楚的程序的一部分:
lineBreakCount++;
if (lineBreakCount === chessBoardSize) {
chessBoard += "n";
lineBreakCount = 0;
}
当我运行代码时,我得到这个:
# # # #
但是,应该是这样的:
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
您的逻辑无法处理最后一个字符可能不仅仅是"#"或"的事实。 这应该有效:
var chessBoardSize = 8;
var chessBoard = " ";
var lineBreakCount = 0;
var max = chessBoardSize*chessBoardSize;
for(let i = 1; i < max; i++) {
lineBreakCount++;
if (lineBreakCount === chessBoardSize) {
chessBoard += "n";
lineBreakCount = 0;
}
if (chessBoard[chessBoard.length - 1] === 'n') {
chessBoard += chessBoard[chessBoard.length - 2];
} else if(chessBoard.slice(-1) === " ") {
chessBoard += '#';
} else {
chessBoard = chessBoard + " ";
}
}
console.log(chessBoard);
您正在尝试用复杂的解决方案解决一个简单的问题。
结果是一个矩阵,这意味着你(可能不需要(需要嵌套循环。
- 循环遍历列。
- 循环穿过一条线。
- 添加检查
if-else
以在#
或" "
之间进行选择。
我们看到#
的位置只在达到这个数学规则的情况下:case%2 === 0
。
const chessboard = (size, lineLength) => {
for (let vindex = 0; vindex < size + 1; vindex++) {
let line = String("");
for (let hindex = 0; hindex < lineLength + 1; hindex++) {
vindex % 2 === 0 && ((hindex % 2 === 0 && (line += "#")) || (line += " "))
vindex % 2 != 0 && ((hindex % 2 != 0 && (line += "#")) || (line += " "))
}
console.log(line)
}
}
chessboard(8, 10)