使用什么而不是空
本文关键字:什么 | 更新日期: 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());