使用什么而不是空

本文关键字:什么 | 更新日期: 2023-09-27 18:26:29

static int min(int[] arr, int a)
    {
        int min = arr[0];
        for (int i = 1; i < a; i++)
            if (arr[i] < min)
                min = arr[i];
        return min;
    }
    static void Main(string[] args)
    {
        int[] arr = new int[10];
        int i;
        Console.WriteLine("Vnesi števila: ");
        for (i = 0; i < 10; i++)
        {
            int stevilo = int.Parse(Console.ReadLine());
            if (stevilo == 0)
                break;
            arr[i] = stevilo;
        }
        if (i < 2)
        {
            Console.WriteLine("Napaka - premalo števil!");
            Console.ReadKey();
            return;
        }
        int min1 = min(arr, i);
        int? min2 = null;
        for (int j = 0; j < i; j++)
        {
            int stevilo = arr[j];
            if(stevilo != min1 && (min2 == null || stevilo < min2))
                min2 = stevilo;
        }
        if(min2 == null)
            Console.WriteLine("Napaka - vsa števila enaka!");
        else
            Console.WriteLine("Drugo najmanjše: " + min2.ToString());
        Console.ReadKey();
    }
}

}因此,此代码读取 2 到 10 个数字,并写出其中一个数字中第二小的数字。您可以取消输入带有键 0 的数字。在无法写出第二个最小数字的情况下(所有输入都是例如 5 5 5 5(,则不会写出任何数字(。

但是我发现我们不能使用 null 值,那么我可以用什么替换它?谢谢!

使用什么而不是空

min2 变量初始化为 0,然后在需要搜索最小值且不使用可为空整数时对其进行测试

    int min2 = 0;
    for (int j = 0; j < i; j++)
    {
        int stevilo = arr[j];
        if(stevilo != 0 && stevilo != min1 && stevilo < min2))
            min2 = stevilo;
    }
    if(min2 == 0)
        Console.WriteLine("Napaka - vsa števila enaka!");
    else
        Console.WriteLine("Drugo najmanjše: " + min2.ToString());

您还应该更改输入循环以避免用户输入出现问题

int stevilo;
string userInput = Console.ReadLine();
if(!Int32.TryParse(userInput, out stevilo) || stevilo == 0)
    break;
arr[i] = stevilo;

使用 Int32.TryParse 可避免在用户键入无法转换为整数的内容时出现异常

嗯,一个奇怪的约束,但是一旦你有了它,那么只需使用bool标志或min2必须与这样的min1不同的事实

// ...
int min1 = min(arr, i);
int min2 = min1;
for (int j = 0; j < i; j++)
{
    int stevilo = arr[j];
    if(stevilo != min1 && (min2 == min1 || stevilo < min2))
        min2 = stevilo;
}
if(min2 != min1)
    Console.WriteLine("Napaka - vsa števila enaka!");
else
    Console.WriteLine("Drugo najmanjše: " + min2.ToString());