简体   繁体   English

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

[英]im trying to find biggest negative number in array c#

Running perfect but there is no result only cursor.运行完美但没有结果只有游标。 The expected result is -15预期结果是-15

        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();

You can use Where and Max extension methods from System.Linq namespace:您可以使用System.Linq命名空间中的WhereMax扩展方法:

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

Max() will throw exception if there is not any negative number in the collection.如果集合中没有任何负数, Max()将抛出异常。 So, you may want to use DefaultIfEmpty if you want to return 0 instead of any exception:因此,如果您想返回0而不是任何异常,您可能需要使用DefaultIfEmpty

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

Use Max() to determine your desired value使用Max()确定您想要的值

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

If you want to keep your code, replace int maxNumber = 0;如果你想保留你的代码,替换int maxNumber = 0; with int maxNumber = int.MinValue;int maxNumber = int.MinValue; so maxNumber gets overwritten, otherwise there can't be a bigger negative number compared to 0所以maxNumber被覆盖,否则不能有比0更大的负数

You can try this:你可以试试这个:

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 IDEONE 演示

If you are looking for non-Linq solution (good old loop):如果您正在寻找非 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();

This code either prints out the maximum negative number -15 or 0 if the coolection ( dizi ) doesn't contain any negative numbers此代码或者打印出的最大负数-150 ,如果coolection( dizi )不包含任何负数

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

Replace your code with this and you will get the correct output用这个替换你的代码,你会得到正确的输出

   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")
 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM