2014-09-13 245 views
0

我想刪除用戶輸入索引和值的int數組元素(意味着用下一個數組元素替代數組元素),所以它在做但在輸出中它給了我元素兩次示例輸入數組爲:1 2 3 4 5 6,並且用戶說要刪除3索引處的第3個元素,則輸出爲:1 2 4 4 5 6什麼是解決方案plz.Without using any function or library。刪除數組元素(C#)

Console.WriteLine("Enter The Length Of Linear Array"); 
int length = Convert.ToInt32(Console.ReadLine()); 
int[] LinearArr = new int[length + 2]; 
Console.WriteLine("Maximum Number Of Inputs : {0}", length); 


for (int i = 1; i < LinearArr.Length - 1; i++) 
{ 
    LinearArr[i] = Convert.ToInt32(Console.ReadLine()); 
} 
Console.WriteLine("What Number You Want To Delete And At What Index"); 
int InsertNum2 = Convert.ToInt32(Console.ReadLine()); 
int k2 = Convert.ToInt32(Console.ReadLine()); 
Console.WriteLine("Number :{0} And Index :{1}",InsertNum2,k2); 

InsertNum2 = LinearArr[k2]; 
for (int i = k2; i < LinearArr.Length-1; i++) 
{ 
    LinearArr[k2] = LinearArr[k2 + 1]; 


} 
length = length - 1; 
for (int i = 1; i < LinearArr.Length-1; i++) 
{ 
    Console.WriteLine(LinearArr[i]); 
} 
//Input :1 2 3 4 5 6 
//output :1 2 4 4 5 6 
+1

歡迎來到Stack Overflow。究竟是什麼問題?您的代碼按預期工作。 – 2014-09-13 16:58:06

+1

只需使用'List '而不是數組。它有一個'刪除'功能。 – 2014-09-13 16:58:33

+0

它不可能告訴你是否想要元素重複或不重複。你能澄清你的問題嗎? – paqogomez 2014-09-13 16:59:12

回答

1

你的代碼的問題,你在使用k2是:LinearArr[k2] = LinearArr[k2 + 1];,你應該使用i代替。我認爲你的做法是不是一個好方法,也許下面的方法將滿足您的要求:

Console.WriteLine("Enter The Length Of Linear Array"); 
int length = Convert.ToInt32(Console.ReadLine()); 
int[] LinearArr = new int[length + 2]; 
Console.WriteLine("Maximum Number Of Inputs : {0}", length); 


for (int i = 1; i < LinearArr.Length - 1; i++) 
{ 
    LinearArr[i] = Convert.ToInt32(Console.ReadLine()); 
} 
Console.WriteLine("What Number You Want To Delete And At What Index"); 
int InsertNum2 = Convert.ToInt32(Console.ReadLine()); 
int k2 = Convert.ToInt32(Console.ReadLine()); 
Console.WriteLine("Number :{0} And Index :{1}",InsertNum2,k2); 

//create a new array with length = LinearArray - 1 
int[] newArray = new int[LinearArray.Length - 1]; 
int currentIndex = 0; 

InsertNum2 = LinearArr[k2]; 
for (int i = 0; i < LinearArr.Length; i++) 
{ 
    //if i == index want to delete, ignore 
    if(i != k2) 
    { 
     newArray[currentIndex] = LinearArray[i]; 
     currentIndex++; 
    } 
} 
length = length - 1; 
for (int i = 0; i < newArray.Length-1; i++) 
{ 
    Console.WriteLine(newArray[i]); 
} 
+0

謝謝@Dan Cuong – 2014-09-13 17:21:25

+0

不客氣,玩編碼。 – 2014-09-13 17:22:54

+0

非常非常感謝你的工作。 @Doan Cuong – 2014-09-13 17:24:20

0

將數組轉換爲列表,刪除元素並將列表轉換回數組。

var numList = LinearArr.ToList(); 
numList.Remove(k2); 
LinearArr = numList.ToArray(); 
1

你不能在運行時從數組中移除一個項目。你最好的選擇是將你的數組轉換爲列表。

 var a = new[] { "A", "B", "C" }.ToList(); 
     a.RemoveAt(1); 
     foreach (var x in a) 
      Console.WriteLine(x); 

如果由於某種原因您不能使用列表而不是數組,那麼您可以逐個移動元素並最後調整數組的大小。

 var a = new[] { "A", "B", "C", "D", "E", "F" }; 
     for (var i = 1; i < a.Length - 1; i++) 
      a[i] = a[i + 1]; 
     Array.Resize(ref a, a.Length - 1); 
     foreach (var x in a) 
      Console.WriteLine(x); 
0

您應該使用索引i,而不是k2

for (int i = k2; i < LinearArr.Length - 1; i++) 
    LinearArr[i] = LinearArr[i + 1]; 
} 

k2不改變)

+0

如果您不調整數組大小,它將包含:1 2 4 5 6 6 – Biri 2014-09-13 17:18:19

+0

@Biri:這只是一個代碼片段,用於解釋錯誤的位置。這不是完整的解決方案。當然'length = length - 1;'仍然必須被調用(然而我只是寫'length - ;') – 2014-09-14 09:40:05

+0

好吧,只是我的2美分。我因爲沒有提供完整的解決方案而只得到有問題的部分而降低了評價。 :-) – Biri 2014-09-14 13:23:56