2012-08-31 101 views
1

請記住我沒有太多編碼經驗...C#在數組中遇到問題

我有問題訪問數組。所以,現在arrayName中已經創造了它應該是相同的,以什麼ReturnArray回到它應該不

int[] ArrayName = ReturnArray(string); 

: 我使用的是這裏返回數組的一個例子的功能創建陣列?

嗯,我設置一個斷點右:

int[] ArrayName = ReturnArray(string); 

我可以看到arrayName中正確創建。

好吧,當我嘗試訪問僅1陣列的價值,像這樣:

print(ArrayName[0]); 

它應該只在陣列權返回的第一個值?好吧不是! 它返回多個值和值的甚至不匹配的內容ReturnArray(串)返回

這裏是「ReturnArray」功能:

public static int[] ReturnArray(string t) 
    { 
     int i,ii,; 
     string ba; 
     string base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 
     List<int> list = new List<int>(); 
     for (i = 0; i < t.Length;i++) 
     { 
      ba = t.Substring(i, 1); 
      ii = base64.IndexOf(ba) * 64; 
      list.Add(ii); 
     } 
     return list.ToArray(); 
    } 

增加了更多的代碼做響應的自評

private void outputLoop() 
    { 
     int i = 0; 
      for (i = 0; i < 63; i++) 
      { 
       int te = lines[i].Length - 128; 
       string tes = lines[i].Substring(te, 64); 
       int[] ArrayName = ReturnArray(tes); 
       _textlayer.DrawString(_font, ArrayName[i].ToString(), new Vector2(1100, i * 15), Color.White); 
      } 
    } 
+0

你的'打印'功能是做什麼的?只有你能看到的代碼行爲很難猜測。考慮製作自包含的樣本(與Tim Medora在其(+1)答案中的相似)。製作控制檯項目並使用Console.WriteLine,爲你的gat和wxpect添加註釋(而不是全部大寫「超過一個值」)。 –

回答

2

這是一個工作示例。讓我們解構。

static void Main(string[] args) { 
    // declare a variable and assign it to the return value of ReturnArray() 
    var arr = ReturnArray("foo"); 

    // get the first value in the array 
    var first = arr[0]; 
} 

public static int[] ReturnArray(string t) { 
    int i, ii; 
    string ba; 
    string base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 
    List<int> list = new List<int>(); 
    for(i = 0; i < t.Length; i++) { 
     ba = t.Substring(i, 1); 
     ii = base64.IndexOf(ba) * 64; 
     list.Add(ii); 
    } 
    return list.ToArray(); 
} 

首先,如果你正試圖使基部64,算法,它已經完成和in the framework。如果你正在努力學習,那真是太好了,但還有一些例子可以繼續。

ii = base64.IndexOf(ba) * 64; 

其次,你的代碼就返回了我所期望的,即它從何而來IndexOf() * 64產品的數字陣列。

這個小例子產生1984, 2560, 2560爲 「foo」 和索引0處的值是1984年

「AAA」 產量0, 0, 0,因爲的IndexOf()爲0 * 64

正如你所期望的, ,因爲的IndexOf()返回1,它是由64

更多調試碼相乘(基於評論) 「BBB」 的產率64, 64, 64

int[] arr = ReturnArray("DADBALAMANAOAAABAYAZAaAbAcAdAeAff/BIBJBKBLBMBNBOBJBKBLBMBNBOBPf/AAABAoApAqArAsAt‌​AuAvf/f/+4+5f/f/f/AAABf/B4B5B6DQAZAaAbAcAdAeAZAa"); 

// should print "192" 
System.Diagnostics.Debug.WriteLine(arr[0]); 
+0

從理論上講,你是正確的,但由於某種原因,它似乎不能正常運行。 – Bryan

+0

你得到了什麼*,即什麼輸入產生什麼結果,以及如何輸出結果? –

+0

DADBALAMANAOAAABAYAZAaAbAcAdAeAff/BIBJBKBLBMBNBOBJBKBLBMBNBOBPf/AAABAoApAqArAsAtAuAvf/F/+ 4 + 5F/F/F/AAABf/B4B5B6DQAZAaAbAcAdAeAZAa 將192,0,192,64,0,704等是否正確?而事實上它返回是正確的......我輸出數組[0] XNA 像: _textlayer.DrawString(_font之外,arrayName [0]的ToString(),新Vector2(1100,X * 15) , 白顏色); – Bryan