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),则不会写出任何数字。)
但是我发现我们不能使用空值,那么我可以用它替换它?谢谢!
答案 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());