0

我试图创建一个二维数组并在对角线上放置四个“X”并创建一个双循环来检测和计算 X 的数量,它可以工作,但它不能正确地完成工作,它真正做的是计算 X 的数量在每一行,我的问题是如何让它只计算对角线上的 X?

    var creatematrix = function (nbRang, nbColumn) {
        var result = Array(nbRang);
        for (var i=0; i<nbRang; i++) {
            result[i] = Array(nbColumn);
        }
        return result;
    };

    var m = creatematrix(6, 7);

例如,如果我这样做

      m[4][1] = "X";
      m[3][2] = "X";
      m[2][3] = "X";
      m[1][4] = "X";

      m[5][3] = "O";
      m[3][3] = "O";
      m[4][3] = "O";
      m[2][4] = "O";

或者这个结果是一样的

    m[1][1] = "X";
    m[2][1] = "X";
    m[3][1] = "X";
    m[4][1] = "X";



    m[5][3] = "O";
    m[3][3] = "O";
    m[4][3] = "O";
    m[2][4] = "O";

这是我所拥有的:

   var sumX = 0;
   for(var k = 5; k >= 0  ; k--){
       if(sumX == 4){
           alert("player 1 won");
       }
       for(var i = 0 ; i<= 6; i++){
           if(m[k][i]== "X" ){
               sumX += 1;
               break;
           }
           if(m[k][i]== "O" ){
              sumX = 0;         
           }
       }
   }    
4

1 回答 1

1
function getCount(m){
    var count =0;
    for(var i=0; i<m.length; i++)
    {
      if(m[i][m.length-i-1] === "X")
      {
         count++;
      }
    }

    return count;
}

这将沿着对角线向下并检查每个值。

您还可以使用

function getCount(m){
    return m.reduce(function(prev,current,index,arr){ 
      return prev + current[arr.length-index-1];},0);
}

JSFiddle

于 2013-03-24T17:44:44.677 回答