2016-05-12 66 views
-2

對不起,這個問題的措辭不是很好,我不完全確定如何問它。循環陣列,向上和向左的方向工作,向下和向右的方向返回錯誤?

此語句可以正常工作

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

而這一次導致無效的錯誤,玩家移動到板的底部,我認爲這是做的[I + 1]部分問題,因爲當它變成[i - 1];像以前的if語句它工作

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

想一想,當我== 0時,期待從board [i - 1] [j]得到什麼?當我行1時,與董事會[i + 1] [j]同樣行使職權? – willll

+1

Off topic:在'direction'上使用'std :: tolower'並且保存自己不得不測試'direction =='S'',並且它是上層的cronys。 – user4581301

+1

'_getch'具有Visual Studio的自我簽名。 Visual Studio有一個出色的調試器。如果你學會使用它,你的生產力將會顯着提高。閱讀更多:https://msdn.microsoft.com/en-CA/library/sc65sadd.aspx – user4581301

回答

0

你最安全的辦法是在使用之前測試你的數組表達式:

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

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

這應該說明爲什麼你看到在你的代碼的問題。

相關問題