2015-09-26 56 views
3

我正在嘗試創建一個2D字符數組以容納一個字符網格,這將用作2D地形遊戲的'地圖'。C#IndexOutOfRange數組異常

我得到一個:

IndexOutOfRange例外

..和不明白爲什麼。我已經在調試模式下遍歷代碼,仍然無法看到問題。

它通過代碼罰款,直到它擊中我的網格的右上邊界X = 25Y = 1

我有_gameWidth_gameHeight創建如下的主要外但仍在類中:

static int _gameWidth = 25; 
static int _gameHeight = 15; 

以下是失敗,嘗試生成並填充網格時的代碼。它未能在這一點上:

else if (x == _gameWidth && y == 1) 
    _grid[x, y] = '╕'; 



static void GenerateGrid() 
{ 
    for (int y = 1; y <= _gameHeight; y++) 
    { 
     for (int x = 1; x <= _gameWidth; x++) 
     { 
      if (x == 1 && y == 1) 
       _grid[x, y] = '╒'; 
      else if (x == _gameWidth && y == _gameHeight) 
       _grid[x, y] = '╛'; 
      else if (x == _gameWidth && y == 1) 
       _grid[x, y] = '╕'; 
      else if (x == 1 && y == _gameHeight) 
       _grid[x, y] = '╘'; 
      else if ((x != 1 && y == _gameHeight) || (x != _gameWidth && y == 1)) 
       _grid[x, y] = '═'; 
      else if ((x == 1 && y > 1 && y < _gameHeight) || (x == _gameWidth && y > 1 && y < _gameHeight)) 
       _grid[x, y] = '│'; 
      else 
       _grid[x, y] = 'x'; 

     } 
     Console.WriteLine(""); 
    } 
} 
+1

我們錯過了'grid [,]' –

+0

問題的解決。感謝您的快速回復。 – Tinderlog

回答

3

此異常結束意味着你已經訪問了一個無效索引。從你寫循環的方式來看,我可以說你認爲索引從1到數組的長度。不過,數組基於零。使用標準循環表格:

for (int i = 0; i < length; i++) 

您的循環從一開始。您可以使用Visual Studio for循環模板。只需輸入"for<tab><tab>"

您的程序可能受益於Code Review Stack Exchange站點。

5

變化

for (int i = 1; i <= gameHeight; i++) 

for (int i = 0; i < gameHeight; i++) 

和寬度這樣做。

編輯: 這是因爲數組的索引以數字0開始,並與所述陣列的長度減1

+0

我很喜歡這個答案,儘管另一個被選爲正確的答案,這個答案有更多的選票:p – Rariolu