我试图在数组c#中找到最大的负数

时间:2016-09-14 12:14:54

标签: c# arrays negative-number

运行完美,但没有结果只有光标。预期结果为 int[] dizi = { 4, 5, -15, 22, -34, 3, 0, 7, 43, 100 }; int maxNumber = 0; for (int i = 0; i < dizi.Length; i++) { if (dizi[i] < 0) { if (maxNumber < dizi[i]) { maxNumber = dizi[i]; Console.WriteLine(maxNumber); } } } Console.ReadKey();

click

6 个答案:

答案 0 :(得分:7)

您可以使用Where命名空间中的MaxSystem.Linq扩展方法:

var maxNegative = dizi.Where(x => x < 0).Max(); 
Console.WriteLine(maxNegative);
如果集合中没有任何负数,

Max()将抛出异常。因此,如果您想要返回DefaultIfEmpty而不是任何例外,则可能需要使用0

var maxNegative = dizi.Where(x => x < 0)
        .DefaultIfEmpty()
        .Max(); 

答案 1 :(得分:3)

使用Max()确定您想要的值

int[] dizi = { 4, 5, -15, 22, -34, 3, 0, 7, 43, 100 };
int result = dizi.Where(x => x < 0).Max();

如果您想保留代码,请将int maxNumber = 0;替换为int maxNumber = int.MinValue;,以便覆盖maxNumber,否则与0相比,不会有更大的负数< / p>

答案 2 :(得分:0)

你可以试试这个:

int maxNumber = 0;
    for (int i = 0; i < dizi.length; i++) {
        if (dizi[i] < 0) {
            if (maxNumber == 0 || dizi[i] > maxNumber ) {
                maxNumber = dizi[i];
            }
        }
    }
return maxNumber;

<强> IDEONE DEMO

答案 3 :(得分:0)

如果您正在寻找非Linq 解决方案(旧的循环):

    int[] dizi = { 4, 5, -15, 22, -34, 3, 0, 7, 43, 100 };
    int maxNumber = 0;

    foreach (var item in dizi)
      if ((item < 0) && (maxNumber == 0 || item > maxNumber))
        maxNumber = item;

    Console.WriteLine(maxNumber);
    Console.ReadKey();

如果合唱(-15)不包含任何负数,此代码会打印出最大负数0dizi

答案 4 :(得分:0)

我意识到如果maxNumber低于任何数组元素,例如int maxNumber=-100程序也是如此

答案 5 :(得分:0)

用此替换您的代码,您将获得正确的输出

   max=0;
   while(i<dizi.Length)
   {
      if(dizi[i]<max)
       max=dizi[i];
      i++;
   }
   if(max!=0)
   {
      Console.WriteLine(max);
   }
   else Console.WriteLine("No negative number")
 }