2012-08-31 177 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