为什么for循环仍然在查找第二个最低数字的方法中添加0



编辑:

我使用LINQ,以摆脱0,但是,我刚刚发现我不允许使用它(是的家庭作业(。好吧,现在我不明白为什么当我输入0时,程序仍然将它添加到数字数组中。有什么建议吗?

static void Main(string[] args)
{
int first, second;
first = second = int.MaxValue;
int[] numbers = new int[10];
Console.WriteLine("Enter 2-10 numbers, end early with 0: ");
for (int i = 0; i < numbers.Length; i++)
{
int.TryParse(Console.ReadLine(), out int input);
if (input == 0) break;
numbers[i] = input;
}
if (numbers.Length < 2)
{
Console.Write("Please enter atleast 2 numbers");
goto finish;
}

Small(first, second, numbers);
finish:
Console.ReadLine();
}
private static void Small(int first, int second, int[] numbers)
{
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] < first)
{
second = first;
first = numbers[i];
}
else if (numbers[i] < second && numbers[i] != first)
{
second = numbers[i];
}
}
if (second == int.MaxValue)
{
Console.Write("Please Enter At least 2 Diffrent Numbers");
}
else
{
Console.Write("Second Lowest Number is {0}", second);
}
}

现在输出良好。

首先,您的迭代是完全有线的。使用迭代数组

foreach(int i in numbers)

所以你可以得到i在所有10个位置上的值。这个数字一直没有设置(可能是0(,所以你总是写数字[0]使用

for(int i = 0; i < numbers.Length; i++)

将解决这个问题。

第二:如果用户没有输入足够的信息,就不会返回到您的输入。同时检查

if(numbers.Length < 2)

总是正确的(固定大小为10(!

我建议如下:

List<int> numbers = new List<int>();
Console.WriteLine("Enter 2-10 numbers, end early with 0:");
while(numbers.Count < 10){
int.TryParse(Console.ReadLine(), out int input);
if (input == 0) break;
numbers.Add(input);
}
if(numbers.Count < 2){
Console.WriteLine("Input at least 2 numbers!");
} else {
Small(first, second, numbers);
}

您的Small((方法是可以的,并且工作形式正确!

但是您把Main((输入法搞砸了。

保持代码易于测试:

static void Main(string[] args)
{
int first, second;
first = second = int.MaxValue;
int[] numbers = new int[10] {3,4,5,51,3,7,10,4,5,6};
Small(first, second, numbers);
}

这应该做同样的工作更好一点:

int[] numbers = new int[10] { 3, 4, 4, 51, 3, 7, 10, 4, 5, 6 };
Console.WriteLine($"2nd smallest is {numbers.Where(n => n > numbers.Min()).First()} and {numbers.Min()} is smaller ");

最新更新