2015-09-26 3 views
3

Я пытаюсь создать массив двумерных символов, чтобы удерживать сетку символов, которая будет использоваться как своего рода «карта» для 2D-консольной игры.C# IndexOutOfRange Array Exception

Я получаю:

IndexOutOfRange исключение

..и не может понять, почему. Я прошел через код в режиме отладки и все еще не вижу проблемы.

Он обрабатывает код до тех пор, пока он не достигнет X = 25 и Y = 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>".

Ваша программа может воспользоваться сайтом Exchange Review Stack Exchange.

5

Изменить

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

в

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

и сделать то же самое для ширины.

EDIT: Это происходит потому, что индексы массива начинаются с цифры 0 и заканчиваются длины массива минус 1.

+0

Мне нравится, что, несмотря на то, что другой выбран в качестве правильного ответа, этот ответ имеет больше голосов: p – Rariolu

Смежные вопросы