【问题标题】:Finding the maximum value on a random array在随机数组上找到最大值
【发布时间】:2013-07-19 21:21:14
【问题描述】:

好吧,我试图在数组中找到一个 maxValue,但我觉得它应该更难。通常这里的代码有效。如果我声明一个数组并手动输入数组的数字,它会找到最大值。但是当我输入一个方法来创建一个带有随机数的数组时,它会中断并返回最后一个设置为最大值的值。

static int MaxArray(int[] Array)
{
    int maxVal = Array[0];
    for(int i = 0; i < Array.Length; i++)
    {
        if(Array[i] > maxVal)
        {
            maxVal = Array[i];
        }
    }           
    return maxVal;
}
static void Main(string[] args)
{
    Random r = new Random();
    int[] myArray = new int[5];
    for(int i = 0; i < myArray.Length; i++)
    {
        int rNumb = r.Next(0, 100);
        for (int v = 0; v < myArray.Length; v++)
        {
            myArray[v] = rNumb;
        }
        Console.WriteLine(myArray[i]);
    }
    Console.WriteLine("Press entere to find the max value");
    Console.ReadKey();            
    Console.Write(MaxArray(myArray));
    Console.Read();
}

【问题讨论】:

    标签: c# arrays random


    【解决方案1】:

    Main 方法中的内部 for 循环是无用的。它用当前的随机数填充整个数组(所以最后整个数组将包含最后一个重复的随机数)。
    正确的代码如下:

    for(int i = 0; i < myArray.Length; i++)
    {
        int rNumb = r.Next(0, 100);
        myArray[i] = rNumb;
        Console.WriteLine(myArray[i]);
    }
    

    【讨论】:

      【解决方案2】:

      您正在用第二个 for 循环覆盖值,

          for (int v = 0; v < myArray.Length; v++)
          {
              myArray[v] = rNumb;
          }
      

      将在数组的每个索引处写入当前随机数。最后一个随机数将覆盖之前的随机数,因此它将被声明为 max,因为它是数组中唯一可用的数字。

      试试这个:

          static void Main(string[] args)
          {
              Random r = new Random();
              int[] myArray = new int[5];
              for (int i = 0; i < myArray.Length; i++)
              {
                  myArray[i] = r.Next(0, 100);
      
                  Console.WriteLine(myArray[i]);
              }
              Console.WriteLine("Press entere to find the max value");
              Console.Write(MaxArray(myArray));
              Console.Read();
          }
      

      但老实说 MaxArray 方法没用,不要重新发明轮子,改用 LINQ 中的 Max:

      Console.Write(myArray.Max());
      

      【讨论】:

      • 谢谢你,我不知道存在 max 方法,这更多是因为我现在正在学习 C#,但我没有明白我做错了什么
      【解决方案3】:

      这很容易使用 Linq 实现。

      using System.Linq;
      
      private static Random _random = new Random();
      public static int[] GenerateRandomArray(int arrayLength)
      {
          return Enumerable.Range(0, arrayLength).Select(i => _random.Next(0, 100)).ToArray();
      }
      
      public static int FindMaxValue(int[] array)
      {
          return array.Max();
      }
      

      【讨论】:

        【解决方案4】:

        这是因为你的数组初始化完全没用。这就是您要查找的内容:

        for(int i = 0; i < myArray.Length; i++)
        {
            myArray[i] = r.Next(0, 100);
            Console.WriteLine(myArray[i]);
        }
        

        最后,数组将如下所示(使用您的代码):

        {n, n, n, n, n}
        

        其中n 是最后一个随机数。

        【讨论】:

          【解决方案5】:

          你不需要这个循环。你应该改变这个

          for (int v = 0; v < myArray.Length; v++)
              {
                  myArray[v] = rNumb;
              }
          

          myArray[i] = rNumb;
          

          通过编写此循环,您将用最后一个值覆盖数组中的所有值。

          【讨论】:

            【解决方案6】:

            您每次都将最后一个值设置为最大值的原因是因为您将数组中的每个元素都设置为在外部 for 循环的最后一次迭代中生成的最后一个随机数。

            您的Console.WriteLine(myArray[i]); 让您误以为您传递给 MaxValue() 的数组的值实际上是什么!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-08-01
              • 1970-01-01
              • 2016-06-27
              • 2018-08-22
              • 1970-01-01
              • 2018-04-09
              • 2022-08-13
              • 2018-07-01
              相关资源
              最近更新 更多