2017-05-08 233 views
0

目前我有600个月(1月至12月)的数组,我想创建一个基于初始数组的基于int的新数组。将字符串数组转换为int(月份为数字)

目前我有(忽略任何遗产。作为即时通讯从不同势类调用数组)

 for (int i = 0; i < Legacy.Month1.Length; i++) 
     { 

      int[] MonthNo1 = new int[Legacy.Month1.Length]; 

      switch (Legacy.Month1[i]) 
      { 
       case "January ": 
        MonthNo1[i] = 1; 
        break; 
       case "February ": 
        MonthNo1[i] = 2; 
        break; 
       case "March ": 
        MonthNo1[i] = 3; 
        break; 
       case "April ": 
        MonthNo1[i] = 4; 
        break; 
       case "May": 
        MonthNo1[i] = 5; 
        break; 
       case "June ": 
        MonthNo1[i] = 6; 
        break; 
       case "July ": 
        MonthNo1[i] = 7; 
        break; 
       case "August ": 
        MonthNo1[i] = 8; 
        break; 
       case "September ": 
        MonthNo1[i] = 9; 
        break; 
       case "October": 
        MonthNo1[i] = 10; 
        break; 
       case "November": 
        MonthNo1[i] = 11; 
        break; 
       case "December ": 
        MonthNo1[i] = 12; 
        break; 
      } 

      for (int j = 0; i < MonthNo1.Length; j++) 
      { 

       Console.WriteLine(MonthNo1[j]); 

      } 

可惜,这似乎并没有工作。

它成功输出第一个转换的数字,但其他599都是空白的。对在过程结束时最重要的是,我得到异常

System.IndexOutOfRangeException

在代码的底部有关的Console.WriteLine(MonthNo1[j]);

任何人都可以看到我在哪里出错吗?

+0

那么,通过我的逻辑'INT [] MonthNo1 =新INT [Legacy.Month1.Length]'将为取每一个循环的600个整数新的数组,和'MonthNo1'将在第一个循环结束时只包含1条记录(因此抛出索引超出范围),我说得对吗?尝试在第一个循环外拉出int [] MonthNo1 = new int [Legacy.Month1.Length]。 –

回答

2

第一个问题的答案是将MonthNo1阵列初始化循环。将外线for循环外的线int[] MonthNo1 = new int[Legacy.Month1.Length];移开。我还建议在第一个for循环之外移动第二个for循环,因为您只需要遍历MonthNo1一次,而不是每次向它添加一个元素。

第二个问题是由于第二个for循环中的条件不正确造成的。请注意,在第二个for循环中,计数器变量为j,而不是i

0

不要使用开关,让我们创建一个新的列表。比较后,只需添加到新列表中。请尝试以下操作:

var monthNo1 = new List<int>(); 
if(!string.IsNullOrEmpty(Legacy.Month1[i])) 
{ 
if (Legacy.Month1[i].Trim() == "January") 
monthNo1 .Add(1); 
if (Legacy.Month1[i].Trim() == "February") 
monthNo1 .Add(2); 
... 
} 

for (int j = 0; i < monthNo1.Length - 1; j++) 
{ 
    Console.WriteLine(monthNo1[j]);  
} 
0

必须先将for (int i = 0; i < Legacy.Month1.Length; i++)

初始化数组从删除int[] MonthNo1 = new int[Legacy.Month1.Length]; for循环

之前添加它你初始化的阵列每一个循环都会覆盖每一次。

结果:

int[] MonthNo1 = new int[Legacy.Month1.Length]; 

for (int i = 0; i < Legacy.Month1.Length; i++) 
{ 
     switch (Legacy.Month1[i]) 
     { 
      case "January ": 
       MonthNo1[i] = 1; 
       break; 
      case "February ": 
       MonthNo1[i] = 2; 
       break; 
     } 

}