【问题标题】:im trying to find biggest negative number in array c#我试图在数组c#中找到最大的负数
【发布时间】:2017-01-22 05:54:54
【问题描述】:

运行完美但没有结果只有光标。预期结果是-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();

【问题讨论】:

  • 如果没有结果,如何完美运行?
  • if (maxNumber &lt; dizi[i]) 如果 maxNumber 为 0,则它永远不会小于负数。
  • 使用调试器。逐行浏览它。你会注意到@Dennis_E 所说的问题所在。
  • 应该是if (maxNumber &gt; dizi[i])
  • 我支持 Sami 所说的话:如果您想真正了解它的问题所在,请在调试器中单步执行。没有更好的方法来理解您的代码。

标签: c# arrays negative-number


【解决方案1】:

您可以使用来自System.Linq 命名空间的WhereMax 扩展方法:

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

Max() 如果集合中没有任何负数,将抛出异常。所以,如果你想返回0而不是任何异常,你可能想使用DefaultIfEmpty

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

【讨论】:

  • @AnektarcıLegend 实际上,这没什么大不了的。但是,当然最好在开始时编写自己的代码而不是使用 Linq 方法
  • +1 表示.DefaultIfEmpty() 提及。极端情况(此特定代码中没有负数)值得考虑。
【解决方案2】:

使用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 相比,不能有更大的负数

【讨论】:

  • 问题定义模糊,所以我假设有负数
【解决方案3】:

你可以试试这个:

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

【讨论】:

  • thx @Rahul Tripathi 一旦我添加 'maxNumber == 0 ||'我得到正确的结果
【解决方案4】:

如果您正在寻找 non-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();

如果coolection (dizi) 不包含任何负数,此代码将打印出最大负数-150

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      用这个替换你的代码,你会得到正确的输出

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-10
        • 1970-01-01
        • 2021-08-07
        • 2019-10-16
        • 2019-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多