2012-10-11 99 views
0

這是關於前一個問題發佈前一陣子 Remove -1 entry from integer array使用的未分配的局部變量錯誤C#

我知道有極快的解決方案,張貼在回答部分以前貼出的問題,但作爲一個在線解答一個我嘗試過for循環的新手。

int[] arr = new int[]{ 1, -1, -1, 1 }; 
      int[] new_arr; 
      int index = 0; 
      for (int i = 0; i < arr.Length; i++) 
      { 
       // Console.WriteLine(arr[i]); 
       if (arr[i] == -1) 
        continue; 
       else 
        new_arr[index++] = arr[i]; 
      } 

我收到錯誤

使用未分配的局部變量 'new_arr'

我在做什麼錯的。

編輯

 int[] arr = new int[]{ 1, -1, -1, 1 }; 
     int[] new_arr = new[arr.Length]; //Error being shown at this line 
     int index = 0; 
     for (int i = 0; i < arr.Length; i++) 
     { 

      if (arr[i] == -1) 
       continue; 
      else 
       new_arr[index++] = arr[i]; 
     } 

     for(int j=0;j<new_arr.Length;j++) 
      Console.WriteLine(new_arr[j]); 

回答

3

您尚未初始化數組new_arry。你需要指定它的大小。

int[] new_arr = new int[10]; 

裏面的代碼你正在做的:

new_arr[index++] = arr[i]; 

這裏由於陣列尚未初始化,你要使用它,這就是爲什麼你收到此錯誤。

您可以使用List<int>而不是數組,因爲您似乎不確定代碼中數組的大小。

所以,你的代碼是:

int[] arr = new int[]{ 1, -1, -1, 1 }; 
List<int> tempList = new List<int>(); 
int[] new_arr; 
int index = 0; 
for (int i = 0; i < arr.Length; i++) 
     { 
     // Console.WriteLine(arr[i]); 
     if (arr[i] == -1) 
       continue; 
     else 
      tempList.Add(arr[i]); 
     } 
new_arr = tmepList.ToArray(); 

或完整的代碼可以縮短到:

int new_arr = arr.Where(r=> r!= -1).ToArray(); 
5

編譯器警告說你沒有初始化new_arr變量,則不能使用它後來:

int[] new_arr = new int[arr.Length]; 

在這種情況下,我正在初始化new_arr陣列與arr陣列的大小相同。

+0

先生,它顯示語法錯誤[預計..我正在使用VS 2010 .. –

+0

然後,你必須有一些其他的代碼,你沒有在這裏顯示,因爲如果你只按照我的建議進行編譯它將編譯。 –

+0

先生,我已粘貼完整的代碼在EDIT指出線出現錯誤。請幫忙。如果事先不知道大小,還有沒有辦法使用數組? –

1

您還沒有分配變量new_arr。因此它顯示錯誤。您的代碼可以是這樣的 -

int[] arr = new int[] { 1, -1, -1, 1 }; 
     int[] new_arr = new int[4]; 
     int index = 0; 
     for (int i = 0; i < arr.Length; i++) 
     { 
      // Console.WriteLine(arr[i]); 
      if (arr[i] == -1) 
       continue; 
      else 
       new_arr[index++] = arr[i]; 
     } 
     for (int i = 0; i < new_arr.Length; i++) 
     { 
      Console.WriteLine(new_arr[i]); 

     } 

您不能在c#中使用任何未分配或懸空變量。不要將new_arr分配給null。它會拋出空引用異常。

+1

如果在聲明它時事先不知道數組大小會怎樣.. –

+0

您可以使用ArrayList來獲得動態長度。它提供了相同的功能,我在這個上下文 – AkshayP

+0

好吧,謝謝你的回覆。 –

相關問題