2016-05-12 9 views
-2

Sorry diese Frage ist nicht sehr gut formuliert, ich bin nicht genau sicher, wie man es fragt.Schleifen durch Arrays, nach oben und links Richtung arbeiten, nach unten und nach rechts Richtung Fehler zurückgeben?

Diese Anweisung funktioniert richtig

if (direction == 'w' || direction == 'W') 
{ 
    for (int i = 0; i < rows; i++) 
    { 
     for (int j = 0; j < columns; j++) 
     { 
      if (board[i][j] == playerTile) 
      { 
       if (board[i-1][j] == ' ') 
       { 
        board[i - 1][j] = playerTile; 
        board[i][j] = ' '; 
       } 
       else 
       { 
        std::cout << "Invalid Move" << std::endl; 
        _getch(); 
       } 
      } 
     } 
    } 
} 

während diese eine ungültige Fehler verursacht, und der Spieler bewegt sich in die Unterseite der Platine, ich denke, es ist ein Problem mit dem [i + 1] Abschnitt zu tun, wie wenn es sich zu [i - 1] geändert hat; if-Anweisung wie die vorherige es funktioniert

else if (direction == 's' || direction == 'S') 
{ 
    for (int i = 0; i < rows; i++) 
    { 
     for (int j = 0; j < columns; j++) 
     { 
      if (board[i][j] == playerTile) 
      { 
       if (board[i + 1][j] == ' ') 
       { 
        board[i + 1][j] = playerTile; 
        board[i][j] = ' '; 
       } 
       else 
       { 
        std::cout << "Invalid Move" << std::endl; 
        _getch(); 
       } 
      } 
     } 
    } 
} 
+2

Denken Sie darüber nach, was von Board [i - 1] [j] erwartet wird, wenn i == 0? Gleiche Übung mit Board [i + 1] [j] wenn ich rows-1? – willll

+1

Off topic: benutze 'std :: tolower' auf' direction' und erspare dir das Testen von 'direction == 'S'' und seinen oberen Cronys. – user4581301

+1

'_getch' hat die Ego-Signatur von Visual Studio. Visual Studio verfügt über einen ausgezeichneten Debugger. Ihre Produktivität wird sich dramatisch verbessern, wenn Sie lernen, sie zu benutzen. Lesen Sie hier mehr: https://msdn.microsoft.com/en-CA/library/sc65saddd.aspx – user4581301

Antwort

0

Ihre sicherste Lösung zu testen, ist Ihr Array Ausdrücke, bevor Sie sie verwenden:

if (i > 0) 
{ 
    if (board[i-1][j] /*... */ 

and 
if ((i + 1) < rows) 
{ 
    if (board[i+1][j] /* ... */ 

Dies sollte zeigen, warum Sie Probleme in Ihrem Code sehen.

Verwandte Themen