2016-01-31 135 views
3

我想創建一個基於控制檯的遊戲的世界地圖。C# - 二維數組的字符串數組

在World類中,我有可以使用級別打印方法打印的字符串數組。

public static string[] A1 = new string[] 
{ 
    (" level data"), 
    (" level data"), 
}; 

這工作,如果我做

Render.DrawLevel(World.A1); 

其中Render.DrawLevel需要ARGS:

(string[] _level) 

然而,在世界級的,我想創建一個二維數組可以容納所有Map的字符串數組。

我曾嘗試:

public static string[,][] Map = new string[,][] 
{ 
    { A1 , A2 }, 
    { B1 , B2 }, 
}; 

但是,如果我嘗試使用:

World.Map[0,0] 

我的論據,印刷水平,我得到給出錯誤,這是NULL,而不是字符串[] A1。

如何創建一個2d的數組數組,並正確引用string []參數?

非常感謝,

Fin。

編輯:錯誤地將代碼複製爲'靜態無效'不只是'靜態'。

+0

你正在創建*陣列*的2維數組。也就是說,數組的每個元素都是一個數組本身。一個數組是一個引用類型,因此它的默認值是'null'。想一想你製作一系列字符串時會發生什麼;數組中的元素將是'null',直到你爲它們賦值,你的情況基本上是一樣的。您需要初始化Map [,]'的每個元素,因爲它們不會像您期望的那樣自動引用空數組。 – InBetween

+0

謝謝,我引用了一個菜鳥的錯誤或者在引用它們之後分配變量,並且仍然期待它們賦值。這是問題的原因。 –

回答

2

在陣列初始化後放置Map初始化。在Map的初始化期間,A1,A2,B1,B2等於空。

語法非常好。

這按預期工作:

public static string[] A1 = new string[] 
     { 
      (" level data 1"), 
      (" level data 2"), 
     }; 

    public static string[] A2 = new string[] 
     { 
      (" level data 1"), 
      (" level data 2"), 
     }; 

    public static string[] B1 = new string[] 
     { 
      (" level data 1"), 
      (" level data 2"), 
     }; 

    public static string[] B2 = new string[] 
     { 
      (" level data 1"), 
      (" level data 2"), 
     }; 

    public static string[,][] Map = new string[,][] 
    { 
     { A1, A2 }, 
     { B1, B2 }, 
    }; 
+0

謝謝!我感到很傻,因爲沒有注意到錯誤的初始化順序,我習慣於自由排序類定義,我忘了它不適用於變量賦值。你爲我省了很多困惑。 –

0

你對Map的簽名是不正確的,它不能是void和一個多維字符串數組。將其更改爲:

public static string[,][] Map = new string[,][] 
     { 
      {A1,A2 }, 
      {B1,B2 }, 
     }; 
+0

謝謝,但這只是一個代碼複製錯誤,而不是我的實際問題。我現在編輯它。 –

1

二維數組本質上是一個數組大小相等的數組。你可以把它想象成一個矩陣,每一列(或行,並不重要)都是一個單獨的數組。那麼第一行(列)中的元素將是每個數組的第一個元素。你正在做的是試圖創建一個數組的二維數組。

this的最佳答案是關於您的問題的絕佳解讀。

+0

我已閱讀並重新閱讀了幾次。事實證明,我對多維數組的理解非常有幫助。我無法弄清楚不能引用數組的問題在哪裏出現。 –

+0

問題不在數組語法中,而是變量聲明。我希望其他人會發現你的鏈接也有幫助。謝謝。 –

+1

是的,抱歉 - 我錯誤地解釋了你的代碼,並認爲A1 A2 B1和B2是字符串。 –