制作一个上面有两个皇后的棋盘[重复]
Posted
技术标签:
【中文标题】制作一个上面有两个皇后的棋盘[重复]【英文标题】:Making a chessboard with two queens on it [duplicate] 【发布时间】:2020-01-10 05:58:33 【问题描述】:我希望在我的终端中制作一个 8 x 8 棋盘。我已经制作了正确的 8 x 8 网格,但现在无法将两个皇后添加为 1
我一直在尝试,正如您在代码 arrayz[0][1] = 1 中看到的那样。我想知道问题是否与我的循环有关,或者有一种简单的方法可以将两个循环插入问题中。
const generateBoard= function()
let arrayz = []
let set= []
let newArray = []
for (i = 0; i < 8; i++)
newArray.push(0)
for (y = 0; y < 8; y++)
//newArray[0][1] = 1
arrayz.push(newArray)
arrayz[0][1] = 1 //my failed code that im trying to use to input a single one
return arrayz
console.log(generateBoard(whiteQueen, blackQueen))
[ [ 0, 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0, 0 ] ] //what i keep getting
[ [ 0, 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, , 0, 0, 0, 0, 0, 1 ] ]//what i want
【问题讨论】:
您一遍又一遍地推动同一行。您应该在每个循环中添加一个 new 行。 【参考方案1】:此代码仅创建一个板行数组newArray
,而不是所需的 8 个。数组 arrayz
中的所有 8 个条目都只是对 newArray
的引用。修改其中任何一个都会修改所有8个,这显然不是本意。
其实在 Stack Overflow 上打印这里的输出显示:
[
[
/**id:2**/
0,
1,
0,
0,
0,
0,
0,
0
],
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/,
/**ref:2**/
]
将每个引用数组标记为指向第一个 id 为 2 的元素的指针。这是可运行的示例:
const generateBoard= function()
let arrayz = []
let set= []
let newArray = []
for (i = 0; i < 8; i++)
newArray.push(0)
for (y = 0; y < 8; y++)
//newArray[0][1] = 1
arrayz.push(newArray)
arrayz[0][1] = 1 //my failed code that im trying to use to input a single one
return arrayz
console.log(generateBoard())
可以通过多种方式解决参考问题。例如,改变
arrayz.push(newArray)
到
arrayz.push(newArray.slice());
使用Array#slice
制作newArray
的真实副本,消除不需要的别名。
另一种制作二维零网格的方法是使用Array
构造函数Array#fill
和Array#map
:
const board = Array(8).fill().map(() => Array(8).fill(0));
board[0][1] = 1;
console.log(board);
【讨论】:
以上是关于制作一个上面有两个皇后的棋盘[重复]的主要内容,如果未能解决你的问题,请参考以下文章