繁体   English   中英

Javascript使用for循环将值推入多维数组

[英]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";
 }  
}

这只是代码的初始修复。 您也需要在其他行中移动起始位置,才能获得正确的木板。

以下代码将正确设置两个播放器,并考虑每个播放器中间行的偏移量。

http://repl.it/agR/3344

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM