2010-10-18 83 views
1

這可能是一個範圍界定問題,但下面的代碼死亡。我從2個類Cell和Map構建了一個多維數組。該地圖是一個由X大小的單元格組成的網格。目前爲止很正常(當我學習一種新語言時,我不斷重寫這個程序)。爲了簡潔起見,我只會發布類和反映錯誤的基本測試。當我去打印,當我去打印整個網格陣列我的construtor期間initalized消失在地圖(空異常,因爲電網結束了空一些如何......)學習與陣列(陣列數據消失)C#問題

//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行完成...換句話說,它看起來像構造函數不「粘」,我最終得到一個空的網格(它們都是空的)。我只能假設它是一個範圍問題。 ..我錯過了什麼....?我是否構造了構造函數?

回答

8

的問題是在這裏:

public Cell[,] grid; //global 

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

您已經聲明稱爲電網稱爲網格中的局部變量的實例成員,但你只更新本地變量。

要修復它,改變上述這最後一行:

grid = new Cell[maxX, maxY]; 

也有大量的代碼編譯錯誤的 - 在問題的代碼不可能是你的代碼運行。下次請使用複製並粘貼將代碼複製到問題中。

此外,評論//global是誤導。實例成員不是全局變量。與C#中的全局變量最接近的是靜態成員。

+0

全球性的參考文獻是「全球範圍內的知名度」,而不是整個計劃。 – Idgarad 2010-10-20 18:34:54

0

在您的構造函數中,您將分配給本地網格變量,而不是類網格變量。

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

應該

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

這就像一個冠軍!謝謝。 – Idgarad 2010-10-20 15:16:55

0

在構造函數中,你聲明細胞[,]格,這是隱藏的類級單元[,]網格。 :)