我是编程新手,我的朋友给了我以下问题。
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 {
/*?????*/
}
}
}
我不确定如何处理这个问题。我是否需要循环内的循环?根据我目前的知识,我只知道如何遍历单个数组。提前谢谢。
答案 0 :(得分:1)
是的,你可以像这样使用嵌套循环
for(var i = 0; i < bingo.length; i++)
{
for(var j = 0; j < bingo[i].length; j++)
{
//do some stuff with bingo[i][j]
}
}
随时问你是否需要更多关于循环身体的帮助
答案 1 :(得分: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;
}