在随机数组上查找最大值

时间:2013-07-19 21:21:14

标签: c# arrays random

我试图在数组中找到一个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();
}

6 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

使用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();
}

答案 2 :(得分:1)

你用第二个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());

答案 3 :(得分:0)

这是因为你的数组初始化完全没用。这就是你要找的东西:

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

最后,数组看起来像这样(带代码):

{n, n, n, n, n}

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

答案 4 :(得分:0)

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

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

myArray[i] = rNumb;

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

答案 5 :(得分:0)

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

您的Console.WriteLine(myArray[i]);给出的错误印象是您传递给MaxValue()的数组值实际上是什么!