2013-04-01 7 views
0

У меня есть программа, которая нуждается в некоторых улучшениях. Эта программа вводит 5 элементов в массиве и удаляет, если есть дубликаты. Он работает, но проблема в том, что он устанавливает каждый дубликат равным нулю. Я не хочу показывать нуль. Я хочу, чтобы он был полностью уничтожен и уничтожен. Я не хочу, чтобы этот повторяющийся элемент появлялся. Это то, что у меня так далеко! Может использовать некоторую помощь. Спасибо.Array Duplicate Elimination with C#?

// Gurpreet Singh 
// Duplicate Program 
using System; 

class duplicate 
{ 
    static void Main() 
    { 
    const int Array_Size = 5; 
    int [] number = new int [Array_Size]; 
    int i; 

    for (i = 0; i < Array_Size; i++) 
    { 
     Console.Write("Element " + i + ": "); 
     number[i] = Int32.Parse(Console.ReadLine()); 
     if (number[i] < 9 || number[i] > 101) 
     { 
      Console.WriteLine("Enter Number between 10 - 100"); 
      number[i] = Int32.Parse(Console.ReadLine()); 
     } 
    } 

    for (i = 0; i < Array_Size; i++) 
    { 
     for (int j = 0; j < Array_Size; j++) 
     { 
      if (i != j) 
      { 
       if (number[j] == number[i]) 
        number[j] = 0; 
      } 
     } 
    } 

    Console.WriteLine("Duplicate Removed:"); 
    for (i = 0; i < Array_Size; i++) 
    { 
     Console.WriteLine("Element " + i + " " + number[i]); 
    } 
    Console.ReadLine(); 
} 
} 

ответ

3

Самый простой способ заключается в использовании Distinct метод Linq в:

number = number.Distinct().ToArray(); 

Это возвращает новый массив без дублей.

2

Дубликат отображается как ноль, так как присвоить значение дубликата равным нулю, в строке,

if(number[j]==number[i]) 
    number[j]=0 

удалить элемент из массива, используйте следующий код:

if(number[j]==number[i]) 
{ 
    int k=j; 
    while(k<Array_Size-1) 
    { 
     number[k]=number[k+1]; 
     k++; 
    } 
    Array_Size--; 
} 

заявление Array_Size--; сделано так, что последний элемент не повторяется дважды

1

Это мой полный код, в котором я поставил некоторые дважды для цикла заявления на не допускает вставки дублированных целых чисел в массив. Посмотрите.

class Program 
{ 
    static void Main(string[] args) 
    { 
    const int ARRAY_SIZE = 5; 
    int[] ArrayTable = new int[ARRAY_SIZE]; 
    int Element=0; 
    int a; 

    for(a=0; a<ArrayTable.Length;a++) 
    { 

     Console.Write("Please Enter an integer (between 10-100): "); 
     Element = Int32.Parse(Console.ReadLine()); 
     while (Element < 10 || Element > 100) 
     { 
      Console.Write("Try again (between 10-100): "); 
      Element = Int32.Parse(Console.ReadLine()); 
     } 

     ArrayTable[a] = Element; 
     for (int b = 0; b < a; b++) 
     { 
      while (ArrayTable[a] == ArrayTable[b]) 
      { 
       Console.Write("Integer Duplicated!\nTry again: "); 
       Element = Int32.Parse(Console.ReadLine()); 
       ArrayTable[a] = Element; 
       Console.WriteLine(); 
       while (Element < 10 || Element > 100) 
       { 
       Console.Write("Try again (between 10-100): "); 
       Element = Int32.Parse(Console.ReadLine()); 
       ArrayTable[a] = Element; 
       } 
      } 
     } 
    } 

    for (int c = 0; c < ArrayTable.Length; c++) 
    { 
     Console.Write("{0} ", ArrayTable[c]); 
    } 
    }