2017-05-08 232 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; 
     } 

}