【发布时间】:2021-05-15 05:25:10
【问题描述】:
我的任务是让用户输入数字,当他们输入 0 时,循环将结束并应显示最小的数字。但是,由于他们输入的是 0,因此这将成为最小的数字。我尝试使用 OrderBy 跳过数组中的第一个数字,但这似乎不起作用。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Task 7\n");
int[] numbers = new int[100];
for(int i = 0; i < numbers.Length; i++)
{
Console.WriteLine("Input any number. Once you enter 0, the application will end");
numbers[i] = int.Parse(Console.ReadLine());
if(numbers[i] == 0)
{
break;
}
}
int lowest = numbers.OrderBy(num => num).Skip(1).First();
Console.WriteLine($"The lowest number was: {lowest}");
Console.ReadLine();
}
}
当用户输入 0 时,也许有一种更智能的方式来结束循环
有什么想法吗?
【问题讨论】:
-
一种(简单)方法是不要将最终的
0插入到数组中。但是,在int数组中,每个元素都使用0进行初始化。因此,除非用户输入所有 100 个(或其他)数字,否则其中会有0s。但是您可以使用List代替数组。 -
问题是数组的默认值是
0。使用另一个变量来计算用户输入的项目数(在他输入 0 之前,这根本不是存储问题)或根据@stickybit 评论,使用List<int>。 -
由于 Console.ReadLine 返回一个字符串,我建议将终止键更改为 0 以外的值,例如 x 或类似的值。然后,您将 int.Parse 更改为 TryParse,并且只将数字添加到 TryParse 成功的数组(返回 true)。这样你就会有一个干净的数组,然后你可以得到最小的整数。
-
您根本不应该使用数组。一个列表,甚至更好,根本不存储值!只需使用 do while 循环检查输入的值。