2014-09-13 3 views
0

Я пытаюсь удалить элемент массива int во входном указателе пользователя и значении (означает замену элемента массива на следующий), так что он делает, но на выходе он дает мне пример дважды. входной массив: 1 2 3 4 5 6, и пользователь говорит, чтобы удалить 3-й элемент с индексом 3, тогда выход будет следующим: 1 2 4 4 5 6 что такое решение plz.Without любая функция или библиотека.Удаление элемента массива (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

Добро пожаловать в переполнение стека. В чем проблема? Ваш код работает так, как вы ожидали. –

+1

Просто используйте 'List ' вместо массива. Он имеет функцию «Удалить». –

+0

невозможно определить, хотите ли вы, чтобы элемент повторялся или нет. Можете ли вы прояснить свою проблему? – paqogomez

ответ

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

Спасибо @Doan Cuong –

+0

Добро пожаловать, получайте удовольствие от кодирования. –

+0

Очень спасибо, что это работает. @Doan Cuong –

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

+0

@Biri: Это всего лишь фрагмент кода, объясняющий, где ошибка. Это не полное решение. Конечно, 'length = length - 1;' все равно придется вызывать (я бы, однако, просто написал 'length -;') –

+0

Хорошо, только мои 2 цента. Я получил downvotes за не предоставление полного решения только тех частей, о которых идет речь. :-) – Biri

Смежные вопросы