获取列表中的最低值<>排列

时间:2017-09-30 00:17:36

标签: c# .net arrays

int numbers;
List<int> arrayInt = new List<int>();

for (int i = 0; i <= 10; i++)
{
    Console.Write("Enter 10 integers: ");
    numbers = Int32.Parse(Console.ReadLine());
    arrayInt.Add(i);

    if (i == 10)
    {
        int[] output = arrayInt.ToArray();
        int min = output.Min(); 
        Console.WriteLine(min); //outputs 0
    }
}

用户输入10个整数并将其添加到arrayInt列表中。

用户输入10个整数后,通过将if列表转换为数组,第二个arrayInt获得最低整数。我使用.Min()来获得最低的int,但它仍然输出0

我的代码有什么问题?

例如,I enter 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1Console.WriteLine(min)应输出1,因为它是最低的整数。

5 个答案:

答案 0 :(得分:4)

arrayInt.Add(i);

您正在将i添加到列表中,而不是您要输入的内容。上面的代码实际上并没有使用变量numbers

答案 1 :(得分:2)

我建议做一些改变:

  1. 正如其他人所说,你将计数器变量添加到列表而不是用户输入。这很容易解决。
  2. 当你到达最后一个索引时,你的循环中有额外的逻辑来做一些不同的事情。除此之外,您应该只修改循环条件,使其在适当的时间退出,然后在循环完成后执行最后的步骤。这样,循环的唯一工作就是收集用户输入。
  3. 您应该使用Int.TryParse代替Parse,因为如果用户提供无效输入,它将返回false,在这种情况下我们可以告诉他们再试一次。
  4. 您无需将List转换为Array。列表的扩展方法可以为您提供最小值。您只需在文件顶部使用using System.Linq即可使用它。
  5. 以下是代码:

    static void Main()
    {
        var allNumbers = new List<int>();
    
        for (int i = 0; i < 10; i++)
        {
            Console.Write($"Enter integer #{i + 1}: ");
    
            int input;
            while (!int.TryParse(Console.ReadLine(), out input))
            {
                Console.Write(" - Invalid input, try again: ");
            }
    
            allNumbers.Add(input);
        }
    
        Console.WriteLine($"\nThank you! The smallest number you entered is: {allNumbers.Min()}");
    
        Console.Write("\nDone!\nPress any key to exit...");
        Console.ReadKey();
    }
    

    <强>输出

    enter image description here

答案 2 :(得分:1)

这是因为您正在添加输入数字的当前索引(位置)而不是实际值。改变这个:

arrayInt.Add(i);

对此:

arrayInt.Add(numbers);

答案 3 :(得分:0)

您正在使用0到10之间的List.Add()。因此,您只得到最小值为0的结果。在您的情况下,您可以将其更改为List.Add(number)

答案 4 :(得分:-1)

这个黑客应该给你最小值:

List<int> list = new List<int> { 5, 7, 3 };
list.Sort();
int minVal = list.First();

结果:minVal = 3