使用什么而不是null

时间:2015-12-12 18:16:29

标签: c#

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),则不会写出任何数字。)

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

2 个答案:

答案 0 :(得分:0)

将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的使用可以避免异常

答案 1 :(得分:0)

嗯,一个奇怪的约束,但是一旦你拥有它,那么只需使用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());