2014-02-28 61 views
1

我有一個數組,範圍從-100到100之間的數字。現在,我必須創建一個方法,將正數複製到另一個數組中。 我做了這個:C#無法訪問的代碼(與屬性有關的數組複製器)

static int[] ArrayCopy(int[] t) 
    { 
     int a = 0; 
     int[] g = new int[0]; 
     for (int i = 0; i < t.Length; i++) 
     { 
      if (t[i] > 0) 
      { 

       g[a] = t[i]; 
       a++; 

      } 

     } 
     return g; 

    } 

該程序將終止IndexOutOfRange,我不明白這一點。

回答

1

你需要2個循環。一個用來計算有多少積極因素,然後是一個來複制它們。

static int[] ArrayCopy(int[] t) 
{ 
    int numPositives = 0; 
    for(int i = 0 ; i < t.length ; i++) 
    { 
     if(t[i] > 0)numPositives++; 
    } 

    int[] newArray = new int[numPositives]; 
    int curPositive = 0; 

    for(int i = 0 ; i < t.length ; i++) 
    { 
     if(t[i] > 0) 
     { 
      newArray[curPositive] = t[i]; 
      curPositive++; 
     } 
    } 

    return newArray 
} 
+0

謝謝,它的工作! – user3365304

2

您正在初始化大小爲零的陣列g。只要運行開始,您就嘗試訪問g在特定索引處 - 這不存在。 我想你彪初始化數組g方式如下:

int[] g = new int[t.Length]; 
+0

謝謝,它現在可以工作,但現在我想要的方式。它給出了這樣的東西:0 0 0 0 0 61 23 0 0 12 13. 所以它確實複製了正面的,但是將零複製到原始面板中的負面位置。我需要一個只包含正數的數組。 無論如何,謝謝! :) – user3365304

+0

@ user3365304:也許有*另一個*問題,但你問*的問題*被回答。 – aliteralmind

+0

也許可以考慮使用一個ArrayList,它將根據數組的長度擴展它的大小。使用像你這樣的數組在初始化時需要設置爲正確的大小。 – ElGauchooo