【问题标题】:Three in a Row Check Bingo连续三个检查宾果游戏
【发布时间】:2016-08-18 19:57:39
【问题描述】:

我是编程新手,我的朋友给了我以下问题。

Bingo- 给定一个数组数组,编写一个函数来检查是否有赢家(对角线连续三个,直下等)

      var bingo = [
        [0,0,0],
        [0,0,0],
        [0,0,0]
        ];

我一直在努力设置它。

      function winCheck(bingo) {
        for (var i = 0; i < bingo[i].length; i++) {
           if (/* ??????? */) {
              /*?????*/
           } else {
              /*?????*/
           }
        } 
      }

我不确定如何处理这个问题。我需要一个循环内的循环吗?以我目前的知识,我只知道如何遍历单个数组。提前谢谢你。

【问题讨论】:

  • 矩阵总是3x3?

标签: javascript arrays function multidimensional-array


【解决方案1】:

要按照您想要的方式进行操作的代码太多了,所以首先要确定:真的有必要吗?如果数组的大小变化或未知,我们无法进行任何优化,我们的函数将以检查所有水平线开始:

function winCheck(bingo)
{
  // check for all values equals to 1 in any horizontal row:
  for (var i = 0; i < bingo.length; i++)
  {
    winner = true;

    for(var j=0; j < bingo[i].length; j++)
    {
      if(bingo[i][j] != 1)
      {
        winner=false;
        break;
      }
    }

    if(winner)
      return true;
  }

  // now the same code for for vertical rows
  // . . .

  // and finally two simple loops to check diagonals
  // . . .

  return false;
}

但是如果数组的大小总是 3 x 3,那么一切都会改变!我们可以运行一个循环来检查水平和垂直行,最后如果中间单元格中有 1,则对对角线进行额外检查:

function winCheck(bingo)
{
  var winner = false;
  for (i=0; i<3; i++)
    if(winner = (bingo[i][0]==1) && (bingo[i][1]==1) && (bingo[i][2]==1))
      break;
    else if(winner = (bingo[0][i]==1) && (bingo[1][i]==1) && (bingo[2][i]==1))
      break;

  if(!winner)
    if(bingo[1][1]==1)
      if(!(winner = (bingo[0][0]==1) && (bingo[2][2]==1)))
        winner = (bingo[0][2]==1) && (bingo[2][0]==1);

   return winner;
 }

【讨论】:

  • @RobertoDeLaParra 谢谢!修复了
  • 如果矩阵是 n > 3 仍然是错误的,基于这个“对角线连续三个,直下等”。假设,n=4,这是第一行:[1,1,1,0]
  • @Roberto De La Parra,也许你是对的,但我理解宾果这个词,它是一行中每个位置的一个数字......所以除非杰森澄清我会保留的东西我的回答是
  • 是的,为了澄清,它只需要在行中的每个位置都是一个数字。谢谢!
【解决方案2】:

是的,您可以像这样使用嵌套循环

for(var i = 0; i < bingo.length; i++)
{
    for(var j = 0; j < bingo[i].length; j++)
    {
        //do some stuff with bingo[i][j]
    }
}

随时询问您是否需要有关循环主体的更多帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    相关资源
    最近更新 更多