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

C# 为什么for循环仍然在查找第二个最低数字的方法中添加0,c#,C#,编辑: 我使用LINQ来摆脱0,但我刚刚发现我不允许使用它(是的)。现在我不明白为什么,当我输入0时,程序仍然将其添加到数字数组中。有什么建议吗 static void Main(string[] args) { int first, second; first = second = int.MaxValue; int[] numbers = new int[10]; Console.WriteLine("Enter 2-1

编辑:

我使用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);
        }
    }
static void Main(字符串[]args)
{
int第一,第二;
第一个=第二个=int.MaxValue;
整数[]个数=新整数[10];
Console.WriteLine(“输入2-10个数字,以0开头结束:”);
for(int i=0;i

现在输出正常。

首先,您的设备已连接好。 您可以使用

foreach(int i in numbers)
所以你在所有10个位置都得到i的值。此数字始终未设置(可能为0),因此您总是写入数字[0] 使用

for(int i=0;i
这将解决这个问题

第二:如果用户没有输入足够的信息,您就不会返回您的输入。还有支票

if(numbers.Length < 2)
if(number.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);
}
列表编号=新列表();
Console.WriteLine(“输入2-10个数字,以0开头结束:”);
while(number.Count<10){
int.TryParse(Console.ReadLine(),out int input);
如果(输入==0)中断;
数字。添加(输入);
}
如果(数字计数<2){
Console.WriteLine(“输入至少2个数字!”);
}否则{
小(第一,第二,数字);
}
您的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 ");

你想要(inti=0;i)的
,你说程序“搞砸了?”你这样说是什么意思?你能分享输出吗?试着调试程序,在第一个
foreach
循环中放置一个断点,然后逐级检查代码,看看发生了什么。
整个程序搞砸了
是一个很糟糕的问题描述。此外,你不需要为每个帖子创建一个新的帐户。与另一篇帖子一样,这篇帖子会从同样的家庭作业中获益:
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 ");