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

时间:2018-10-22 11:01:11

标签: 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();

我无法在检查中找到解决方案,如果已经输入了相同的数字。请帮帮我。并请解释为什么是答案。

PS:能否请您仅使用简单的代码,而不使用HashSet之类的关键字?我知道这可以解决问题,但我还不知道。我只是想逐步学习C#,对此感到抱歉。.谢谢!

9 个答案:

答案 0 :(得分:5)

让我们提取一种方法并使用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);

编辑:让我们使用没有旧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;       
   } 

答案 1 :(得分:2)

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

        for (int i = 0; i < 5; i++)
        {
            while (true)
            {
                var newValue = Convert.ToInt32(Console.ReadLine());
                var currentNumber = Array.IndexOf(number, newValue);
                if (currentNumber == -1)
                {
                    number[i] = newValue; // Accept New value
                    break;
                }
                Console.WriteLine("Hold on, you already entered that number. Try again.");
            }
        }

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

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

        Console.ReadLine();

Array.IndexOf()返回数组中numberValue的索引,如果不存在则返回-1

答案 2 :(得分:1)

for (int i = 0; i < 5; i++)
{
    var numberValue = Convert.ToInt32(Console.ReadLine());
    var currentNumberIndex = Array.IndexOf(number, numberValue);
    if (currentNumberIndex >= 0)
    {
        Console.WriteLine("Hold on, you already entered that number. Try again.");
        i--;
    }
    else
    {
        number[i] = numberValue;
    }
}

Array.IndexOf()返回数组numberValue的索引,如果不存在则返回-1。

答案 3 :(得分:1)

  List<Int32> Numbers=new List<Int32>();
  Console.WriteLine("Enter 5 unique numbers");

  while (Numbers.Count<5) {
    int result=-1;
    Boolean IsNumber=Int32.TryParse(Console.ReadLine(),out result);
    if (IsNumber==false) {
      Console.WriteLine("Please enter a number!!!");
      continue;
    }

    if (Numbers.IndexOf(result)>=0) {
      Console.WriteLine("Hold on, you already entered that number. Try again.");
      continue;
    }
    Numbers.Add(result);
  }

答案 4 :(得分:1)

其他人已经粘贴了答案,但这是我的策略。它使用可为空的数组和"emmet.includeLanguages": { "mako": "html" }来避免每次用户键入数字时都对数组中的数字进行迭代。

Contains

答案 5 :(得分:0)

inet_pton(3)

答案 6 :(得分:0)

  public static void Main (string[] args) {
    var numbers = new List<int>();
    while(numbers.Count() < 5)
    {
      var line = Console.ReadLine();
      int number;
      if (int.TryParse(line, out number)) {
        if (numbers.Contains(number))
          Console.WriteLine("You already entered " + line);
        else
          numbers.Add(number);
      } else
        Console.WriteLine(line + " is not a number");
    }
    Console.WriteLine(string.Join(", ", numbers.OrderBy(i => i)));
  }

答案 7 :(得分:0)

using System;
using System.Collections.Generic;

namespace exercise2
{
    class Program
    {
        static void Main(string[] args)

     {
                //exercise 2 : question 3
                Console.WriteLine("Please write 5 numbers");
                var array = new int[5];
                const int loop_leng = 5;

                for(var i = 0; i < loop_leng; i++)
                {
                    var input = Console.ReadLine();
                    if(string.IsNullOrWhiteSpace(input))
                    {
                        Console.WriteLine("Re-try");
                        break;
                    }
                    int numbers = Convert.ToInt32(input);
                    foreach (var x in array)
                    {
                        if (numbers == x)
                        {
                        Console.WriteLine("don't repeat! re-try..");
                        break;
                        }
                    }
                    array[i] = numbers;

                    var a = Array.IndexOf(array, numbers);
                    var b = Array.LastIndexOf(array, numbers);
                    if(a != b)
                    { 
                    if(array[a] == array[i])
                    {
                        break;
                    }
                    }
                }
                { 
                Console.WriteLine();
                Array.Sort(array);
                foreach (var n in array)
                    Console.WriteLine(n);
                }

            }
        }
    }
}

答案 8 :(得分:-2)

您犯了小错误。 您的书面代码 If(number [i] == number [0])将不起作用 正确答案 If(number [i] == number [i])