2014-09-13 208 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