2016-04-25 5 views
1

Ich bin neu in der Programmierung und mein Freund gab mir das folgende Problem.Drei in einer Reihe Check Bingo

Bingo- ein Array von Arrays gegeben, schreiben Sie eine Funktion zu überprüfen, ob es einen Gewinner gibt (entweder drei jemandes in einer Reihe schräg, gerade nach unten, usw.)

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

Ich habe gearbeitet, um richte es so ein.

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

Ich bin mir nicht sicher, wie ich das angehen soll. Brauche ich eine Schleife innerhalb einer Schleife? Nach meinem derzeitigen Wissen kann ich nur ein einzelnes Array durchlaufen. Vielen Dank im Voraus.

+0

Die Matrix ist immer 3x3? – raven

Antwort

1

Es ist so viel Code, um es so, wie Sie zu tun Willst du also zuerst sicher sein: Ist das wirklich nötig? Wenn die Größe des Arrays oder unbekannten variiert, konnten wir keine Optimierung machen und unsere Funktion drearily mit Check alle horizontalen Linien starten:

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

Aber wenn die Größe des Arrays ist immer 3 x 3, ändert sich alles ! Wir können eine einzige Schleife laufen horizontale und vertikale Reihen zu überprüfen und schließlich, wenn wir 1 in der mittleren Zelle haben, gehen Sie zusätzliche Prüfungen für Diagonalen:

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

Ihr erster Code ist falsch – raven

+0

@RobertoDeLaParra thanx! machte eine Lösung – kay27

+1

, wenn die Matrix n> 3 ist immer noch falsch basierend auf diesem "entweder drei in einer Reihe diagonal, gerade nach unten, etc." Angenommen, n = 4 und dies ist die erste Zeile: [1,1,1,0] – raven

1

Ja, können Sie diese verschachtelten Schleifen für wie so verwenden

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

fühlen sich frei zu fragen, ob Sie weitere Hilfe auf die körpereigene Schleife benötigen

Verwandte Themen