2016-04-25 27 views
1

我是新來的編程和我的朋友給了我下面的問題。三連檢查賓果

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

矩陣是3×3總? – raven

回答

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×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; 
} 
+1

你的第一個錯誤代碼是 – raven

+0

@RobertoDeLaParra thanx!如果矩陣n> 3,則作出修正 – kay27

+1

仍然是錯誤的,基於這個「對角線,直線向下等連續三行」。假設這個,n = 4,這是第一行:[1,1,1,0] – raven

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] 
    } 
} 

隨時問,如果你需要在循環體