[英]Javascript pushing values into multidimensional array with for loop
我是Java语言的新手,正在尝试为课程设置一个棋盘格。 我必须用黑色和红色棋盘格来设置板子(即前三行是红色的,后三行是黑色的,每隔一个瓦片都有一个棋盘格),我有点卡住了。 我尝试了下面的代码,这只是将var checkers
数组中的每个值打印为null
,后跟四个'B's
。 我想我需要以某种方式将数组的多维性合并到我的for循环中,但是我不知道该怎么做。 任何指导或帮助深表感谢!
var checkerboard = [[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null]];
function setUpRed(square) {
return (square = 'R');
}
for (var i = 0; i < checkerboard [3][7]; i += 2 ) {
checkerboard.push(setUpRed(checkerboard[i]));
}
function setUpBlack(square) {
return (square = 'B');
}
for (var i = (checkerboard.length - 1); i > checkerboard [6][0]; i -= 2) {
checkerboard.push(setUpBlack(checkerboard[i]));
}
console.log(checkerboard);
是您要找的东西吗?
for(var i = 0; i < 3; i++){
for(var j = 0; j < row.length; j++){
checkerboard[i][j] = "RED"
}
}
for(var i = allrows - 3; i < 3; i++){
for(var j = 0; j < row.length; j++){
checkerboard[i][j] = "BLACK"
}
}
如果已经定义了棋盘格,则不应该推送项目。
var checkerboard = [[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null]];
for(var i = 0; i < 3; i++){
for(var j = 0; j < 8; j+=2){
if (i % 2) checkerboard[i][j] = "R";
else checkerboard[i][j+1] = "R";
}
}
for(var i = checkerboard.length - 3; i < checkerboard.length ; i++){
for(var j = 0; j < 8; j+=2){
if (i%2) checkerboard[i][j] = "B";
else checkerboard[i][j+1] = "B";
}
}
console.log(checkerboard);
我假设您希望这看起来像使用棋子的常规棋盘。 这就是您要做的。
首先,您的“赞成”条件是错误的。
在第一个循环中,测试i <棋盘格[3] [7]。 换句话说,您正在测试i <null是否始终为假(因为JS中null == 0),因此,您永远不会进入此循环。
在第二个循环中,测试i>棋盘格[6] [0]。 换句话说,您正在测试i> null(与i> 0相同)。 另外,您使用i =(checkerboard.length-1)对其进行初始化,这意味着矩阵的最后一行 (长度是指包含这些行的顶级数组)。 考虑到您将i每次迭代减2,则在这里将迭代4次。
其次,您将值推入一个已经填充的数组中。 这将添加元素,而不是覆盖您期望的位置。 要进行覆盖,必须通过索引将其直接写入所需的位置(行和列为2维)。
因此,解决方案将是:
for(var i = 0; i < 3; i++){
for(var j = 0; j < checkerboard[i].length; j+=2){
checkerboard[i][j] = "R";
}
}
for(var i = checkerboard.length - 1; i > checkerboard.length - 3; i--){
for(var j = 0; j < checkerboard[i].length; j+=2){
checkerboard[i][j] = "B";
}
}
这只是代码的初始修复。 您也需要在其他行中移动起始位置,才能获得正确的木板。
以下代码将正确设置两个播放器,并考虑每个播放器中间行的偏移量。
var checkerboard = [[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null]];
function setSquare(player, row, col) {
checkerboard[row][col] = player;
}
function getPieceAt(row, col) {
console.log(checkerboard[row][col] || 'null');
}
function clearBoard() {
for (i = 0; i < checkerboard.length; i++) {
checkerboard[i][i] = null;
}
}
function setUpRed() {
for (row = 0; row < 3; row++) {
if ((row === 0) || (row === 2)) {
for (col = 0; col < checkerboard[row].length; col += 2) {
checkerboard[row][col] = "R";
}
}
else {
for (col = 1; col < checkerboard[row].length; col += 2) {
checkerboard[row][col] = "R";
}
}
}
}
function setUpBlack() {
for (row = 5; row < 8; row++) {
if ((row === 5) || (row === 7)) {
for (col = 1; col < checkerboard[row].length; col += 2) {
checkerboard[row][col] = "B";
}
}
else {
for (col = 0; col < checkerboard[row].length; col += 2) {
checkerboard[row][col] = "B";
}
}
}
}
setUpRed();
setUpBlack();
console.log(checkerboard);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.