我在查找数组中第二大数字时遇到问题。问题是,它不适用于我的所有示例。 在我从键盘读取数字后,我将它们放入方法测试,然后我对它们进行排序..例如:(用户输入)1,2,3,4,5,6,7,8,9, 10 退出:10,9,.. 3,2,1 现在我想用for循环显示第二大数字.. **任务是:如果可能,找到第二大数字,如果不是CW(“错误”)**
代码注释//这里我不知道如何正确编写代码部分。
我希望我的问题有道理......
public static int test(int[] polje)
{
int temp = 0;
Console.WriteLine();
for (int c = 0; c < polje.Length; c++)
{
for (int b = c + 1; b < polje.Length; b++)
{
if (polje[c] > polje[b])
{
temp = polje[c];
polje[c] = polje[b];
polje[b] = temp;
}
}
}
int secondlargest = 0;
//HERE
for (int i = polje.Length - 1; i >= 0; i--)
{
if (polje[polje.Length - 2] == polje[polje.Length - 1] || polje[polje.Length - 2] == 0)
{
Console.WriteLine("Wrong!");
break;
}
else
{
Console.WriteLine("Second largest number is :{0}", polje[polje.Length - 2]);
secondlargest = polje[polje.Length - 2];
break;
}
}
return secondlargest;
}
static void Main(string[] args)
{
int[] polje = new int[10];
Console.WriteLine("Enter values");
for (int i = 0; i < 10; i = i + 1)
{
polje[i] = int.Parse(Console.ReadLine());
if (polje[i] == 0)
{
break;
}
}
test(polje);
Console.ReadLine();
}
}
}
答案 0 :(得分:4)
这很简单:
var secondMaxValue = yourArray.OrderByDescending(x=> x).Skip(1).FirstOrDefault();
答案 1 :(得分:0)
int GetSecondLargest(int[] a){
int a0,b0;
for(int i = 0; i <a.Length;i++){
if(a[i] > a0){
b0 = a0;
a0 = a[i];
}else if(a[i] > b0) b0 = a[i];
}
return b0;
编辑:格式化很糟糕,但想法是保留最大值并使用基本条件获得正确的值。没有Linq需要。