2015-09-29 37 views
0

我有一個數組,TempArray [] = {1,3,-1,5,7,-1,4,10,9,-1}從數組中刪除元素使用For循環+如果語句 - C#

我想從這個數組中刪除每一個-1,並將其餘數組複製到一個名爲Original的新數組中,該數組應該輸出數字爲1,3,5,7,4,10,9

我可以僅在for循環中使用if語句!

這是我到目前爲止,但我不斷收到錯誤消息,System.IndexOutOfRangeException

for (int i = 0; i < TempArray.Length; i++) 
     { 
      if (TempArray[i] != -1) 
      { 
       //error occurs at this line 
       //My attempt is to set the new array, Original[i] equal to TempArray[i] only where the values are not -1. 
       TempArray[i] = Original[i]; 
      } 
     } 
+0

除非您有充分的理由使用數組,否則應該使用列表。 –

回答

2
using System.Linq; 

int[] withoutNegativeOnes = myArray 
    .Where(a => a != -1) 
    .ToArray(); 
+0

從原始問題:「我只能在for循環中使用if語句!」 –

+0

@YeldarKurmangaliyev,'Where'是'if'的糖,'ToArray'使用'for'循環。 –

-1

試試這個

int[] TempArray = { 1, 3, -1, 5, 7, -1, 4, 10, 9, -1 }; 

int[] original = TempArray.Where(i => i != -1).ToArray(); 

foreach(int i in original) 
    Console.WriteLine(i.ToString()); 
+0

從原始問題:「我只能在for循環中使用if語句!」 –

3

如果你只能使用if語句在for循環中。這看起來像一個學校項目。首先你要計算陣列中有多少非負數。創建具有該長度的新數組並填充該數組。

int[] TempArray = new int[] {1,3,-1,5,7,-1,4,10,9,-1}; 
int[] Original ; 
int countNonNegative=0; 
for (int i = 0; i < TempArray.Length; i++) 
{ 
      if (TempArray[i] != -1) 
      { 
       countNonNegative++; 
      } 
} 
    Original = new int[countNonNegative]; 
    int index=0; 
    for (int i = 0; i < TempArray.Length; i++) 
    { 
      if (TempArray[i] != -1) 
      { 
       Original[index] = TempArray[i]; 
       index++; 
      } 
    } 
    Console.WriteLine("Original Length = "+Original.Length); 
+0

嘿,這是接近我所尋找的,但是我仍然得到第二個數組如果語句 - >原始[索引] = TempArray [我];爲什麼會發生這種情況? –

+0

@CoolCat你希望Original是數組還是隻是一個字符串變量? – Hakunamatata

+0

我希望Original是一個數組 –

1
var Original = new int[TempArray.Length]; 
var originalCounter = 0; 

for (int i = 0; i < TempArray.Length; i++) 
{ 
    if (TempArray[i] != -1) 
    { 
     Original[originalCounter++] = TempArray[i]; 
    } 
} 

現在Original可能包含在最後的空白空間,雖然,但你把所有不屬於-1的元素。您可以使用下面的代碼通過值迭代:

for (int i = 0; i < originalCounter; i++) 
{ 
    Console.WriteLine(Original[i]); 
} 

,這就是因爲originalCounter有沒有從TempArray迭代法填補了最後的指數值。