SCloudQ Ответов: 3

Как устранить дубликаты в массиве?


У меня возникли проблемы с устранением дубликатов в моем массиве. Я хочу, чтобы пользователь ввел 5 уникальных номеров. Каждый раз, когда вводится дубликат записи, я хочу получить "дубликат записи. Повторите попытку." сообщение будет появляться до тех пор, пока пользователь не введет действительный номер.

Когда программа запускается:
если вы введете 1, затем 2, а затем еще раз 2, появится сообщение "дубликат записи". Но затем, когда вы вводите новое значение, например 3, оно все равно всплывает.

При окончательном отображении элементов в массиве: каждый элемент содержит последнее введенное вами число.

Что я уже пробовал:

public void numberCheck()
       {
           int[] numbers = new int[5];

           Console.WriteLine("Enter 5 Numbers: ");

           var count = 0;
           while (count < 5)
           {
               bool duplicate = false;
               var input = Convert.ToInt32(Console.ReadLine());

               for (var i = 0; i < numbers.Length; i++)
               {
                   numbers[i] = input;
                   var check = numbers[i];
                   for (var j = i + 1; j < numbers.Length; j++)
                   {
                       if (numbers[i] == numbers[j])
                       {
                           duplicate = true;
                       }
                       while (duplicate == true)
                       {
                           Console.WriteLine("Duplicate entry. Try again.");
                           input = Convert.ToInt32(Console.ReadLine());

                           if (input != check)
                           {
                               //numbers[i] = input;
                               duplicate = false;
                           }
                       }
                   }
               }
               count++;
           }

           Console.WriteLine();

           // print out numbers array
           foreach (var n in numbers)
           {
               Console.WriteLine(n);
           }
       }
   }

3 Ответов

Рейтинг:
24

Kenneth Haugland

Разве ты не можешь просто использовать список вместо этого?

List<int> myList = new List<int>();

if (!myList.Conatins(item))
         myList.Add(item);


SCloudQ

Большое вам спасибо за ваше решение!

Рейтинг:
2

Jochen Arndt

Ваша ошибка в этих строках:

for (var i = 0; i < numbers.Length; i++)
{
    numbers[i] = input;
    // ...
    count++;
}
Вы изначально назначаете входные данные всем элементам массива, перезаписывая все ранее введенные значения.

Подумайте о требовании. Это не сложно (на основе вашего кода):
while (count < 5)
{
    var input = Convert.ToInt32(Console.ReadLine());
    bool duplicate = CheckDuplicate(input, numbers, count);
    if (duplicate)
    {
        Console.WriteLine("Duplicate entry. Try again.");
    }
    else
    {
        numbers[count] = input;
        count++;
    }
}
Все, что вам нужно сделать, это написать функцию, которая проверяет наличие дубликата (или заменить вызов функции кодом, выполняющим то же самое). Для проверки требуются три переменные: входное значение, массив и количество добавленных значений.


Рейтинг:
0

CPallini

Использовать HashSet<int>[^] вместо массива.


SCloudQ

Большое вам спасибо за ваше решение!

CPallini

Добро пожаловать.