Изучение проблем C # с массивом (исчезновение данных массива) - PullRequest
1 голос
/ 18 октября 2010

Вероятно, это проблема с областью видимости, но следующий код не работает. Я строю многомерный массив из 2 классов, Cell и Map. Карта представляет собой ячейку размером X на Y. Пока что вполне нормально (я продолжаю переписывать эту же программу, когда изучаю новый язык). Для краткости я просто опубликую классы и базовый тест, который отражает ошибку. Когда я отправляюсь на печать карты, весь массив сетки, который я инициализировал во время создания, исчезает, когда я иду на печать (исключение Null, поскольку сетка оказывается пустой как-то ...)

//misc using up here

namespace Mapper {
class Program {

static void Main(string[] args)
{ //TODO Parser

 int max_x=2;
 int max_y=2;

 Map myMap = new Map(max_x,max_y);
 myMap.print();


}

class Cell
{
 public char type='o';
 public Cell(char inittype){
 this.type=inittype;
 }

 public void printCell(){
 Console.Write(this.type); }

 public void set(char value){
 this.type = value; }
}

class Map
{
 private int max_X; //global
 private int max_Y; //global
 public Cell[,] grid; //global

 public Map(int maxX, int maxY) {
 Cell[,] grid = new Cell[maxX, MaxY];
 this.max_X = maxX; //Store constructor provided dimensions for global use
 this.max_Y = maxY; 
 for(int yv=0; yv &lt max_Y; yv++){
  for(int xv=0, xv &lt max_X;xv++){
    grid[xv,yx] = new Cell('x');
  }
 }

 public void print() {
 for(int yv=0; yv &lt max_Y; yv++){
  for(int xv=0, xv &lt max_X;xv++){
    grid[xv,yx].printCell();
  }
 }

}}

При выполнении трассировки все выглядит нормально, пока строка Map myMap не завершится ... другими словами, кажется, что конструктор не "прилипает", и я получаю пустую сетку в конце (все они обнуляются). Я могу только предположите, что это проблема сферы каким-то образом ... что я пропускаю ....? Разве я запустил конструктор?

Ответы [ 3 ]

8 голосов
/ 18 октября 2010

Проблема здесь:

public Cell[,] grid; //global

public Map(int maxX, int maxY) {
    Cell[,] grid = new Cell[maxX, MaxY];
    ...

Вы объявили элемент экземпляра с именем grid и локальную переменную с именем grid, но вы обновляете только локальную переменную.

Чтобы исправить это, измените последнюю строку, упомянутую выше, на следующую:

grid = new Cell[maxX, maxY];

В вашем коде также есть большое количество ошибок компиляции - код в вопросе не может бытькод вы работаете.В следующий раз, пожалуйста, используйте copy и paste для копирования кода в вопрос.

Также комментарий //global вводит в заблуждение.Член экземпляра не является глобальной переменной.Ближайшим эквивалентом глобальной переменной в C # является статический член.

0 голосов
/ 18 октября 2010

В конструкторе вы объявляете сетку Cell [,], которая скрывает сетку Cell [,] уровня класса.:)

0 голосов
/ 18 октября 2010

В вашем конструкторе вы назначаете локальную переменную сетки, а не переменную сетки класса.

Cell[,] grid = new Cell[maxX, MaxY];

должно быть

this.grid = new Cell[maxX, maxY];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...