2010-10-18 5 views
1

Il s'agit probablement d'un problème de portée, mais le code suivant disparaît. Je construis un tableau multi-dimensionnel à partir de 2 classes, Cell et Map. La carte est une grille de cellules X par Y. Assez normal jusqu'à présent (je continue à réécrire ce même programme quand j'apprends une nouvelle langue). Par souci de concision, je vais juste poster les classes et un test de base qui reflète l'erreur. Quand je vais d'imprimer la carte toute matrice de grille I initalized au cours de la construtor disparaît quand je vais à imprimer (exception nulle depuis grille finit vide d'une façon ...)Problèmes d'apprentissage C# avec tableau (données de tableau disparaît)

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

}} 

Exécution d'un tout trace semble bien jusqu'à ce que la ligne Map myMap se termine ... en d'autres termes, il semble que le constructeur ne "colle" pas et que je reçois une grille vide à la fin (ils sont tous nuls). Je ne peux que supposer que c'est un problème d'envergure. .. Qu'est-ce que je rate....? Ai-je bork le constructeur?

Répondre

8

Le problème est ici:

public Cell[,] grid; //global 

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

Vous avez déclaré un membre de l'instance appelée grille et une variable locale appelée grille, mais vous mettez à jour seule la variable locale.

Pour résoudre ce problème, changer la dernière ligne mentionnée ci-dessus à ceci:

grid = new Cell[maxX, maxY]; 

Vous avez aussi un grand nombre d'erreurs de compilation dans votre code - le code dans la question ne pourrait être le code que vous êtes fonctionnement. La prochaine fois s'il vous plaît utilisez copier et coller pour copier le code dans la question.

Le commentaire //global est également trompeur. Un membre d'instance n'est pas une variable globale. L'équivalent le plus proche d'une variable globale en C# est un membre statique.

+0

La référence globale était "visibilité globale au sein de la classe elle-même" plutôt que l'ensemble du programme. – Idgarad

0

Dans votre constructeur, vous affectez une variable de grille locale, pas la variable de grille de classe.

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

devrait être

this.grid = new Cell[maxX, maxY]; 
+0

Cela a fonctionné comme un champion! Je vous remercie. – Idgarad

0

Dans le constructeur, vous déclarer la grille de cellules [,], qui cache la grille cellulaire au niveau de la classe [,]. :)

Questions connexes