用C#编写程序并要求用户输入5个唯一编号

Yor*_*rtz -2 c#

编写程序并要求用户输入5个数字.如果先前已输入数字,则显示错误消息并要求用户重试.用户成功输入5个唯一号码后,对其进行排序并在控制台上显示结果.

有人可以帮我这个吗?我真的很困惑如何解决这个问题.这是我的代码.

var number = new int[5];
Console.WriteLine("Enter 5 unique numbers");

for (int i = 0; i < 5; i++)
{
    number[i] = Convert.ToInt32(Console.ReadLine());
    var numberValue = number[i];

    var currentNumber = Array.IndexOf(number, numberValue);
    if (number[i] == number[0])
    {
        continue;
    }
    else
    {
        if (!(currentNumber == number[i]))
        {
            continue;
        }
        else
        {
            Console.WriteLine("Hold on, you already entered that number. Try again.");
        }
    }

    /* foreach (var n in number) { ... } */
    continue;
}

Array.Sort(number);
Console.WriteLine();

foreach (var n in number)
    Console.WriteLine(n);

Console.WriteLine();
Run Code Online (Sandbox Code Playgroud)

如果已输入相同的数字,我无法找到检查的解决方案.请帮帮我.请解释为什么它是答案.

PS:你能否只使用简单的代码而不使用像HashSet这样的关键字?我知道这会解决问题,但我还不知道.我只是一步一步地学习C#所以我很抱歉......谢谢!

Dmi*_*nko 5

让我们提取一个方法并使用a HashSet<int>来确保数字是唯一的:

   using System.Linq; // We are going to use .ToArray()

   ...

   private static int[] ReadUniqueNumbers(int count) {
     HashSet<int> numbers = new HashSet<int>();

     Console.WriteLine($"Enter {count} unique numbers"); 

     while (numbers.Count < count) {
       int number = 0;

       if (!int.TryParse(Console.ReadLine(), out number))  
         Console.WriteLine("Syntax error. Not a valid integer value. Try again.");
       else if (!numbers.Add(number))
         Console.WriteLine("Hold on, you already entered that number. Try again."); 
     }

     // Or if you want ordered array
     // return numbers.OrderBy(item => item).ToArray(); 
     return numbers.ToArray(); 
   }

...

   int[] number = ReadUniqueNumbers(5);
Run Code Online (Sandbox Code Playgroud)

编辑:让我们使用旧的循环,没有HashSet和Linq:

   private static int[] ReadUniqueNumbers(int count) {
     int[] result = new int[count];
     int numberCount = 0;

     while (numberCount < count) {
       int number = 0;

       // When working with user input we should be ready for any string:
       // user may well input "bla-bla-bla" (not an integer at all)
       if (!int.TryParse(Console.ReadLine(), out number))  
         Console.WriteLine("Syntax error. Not a valid integer value. Try again.");
       else {
         bool found = false;

         // Do we have duplicates? 
         // Linq (for reference only)
         // found = result.Take(numberCount).Any(item => item == number);
         for (int i = 0; i < numberCount; ++i)
           if (result[i] == number) {
             found = true; 

             break;
           }

         if (found) // Duplicate found
           Console.WriteLine("Hold on, you already entered that number. Try again."); 
         else {
           result[numberCount] = number;
           numberCount += 1; 
         }
       }  
     }

     return result;       
   } 
Run Code Online (Sandbox Code Playgroud)