0

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

6 回答 6

4

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

for(int i = 0; i < myArray.Length; i++)
{
    int rNumb = r.Next(0, 100);
    myArray[i] = rNumb;
    Console.WriteLine(myArray[i]);
}
于 2013-07-19T21:24:30.090 回答
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();
}
于 2013-07-19T21:31:21.023 回答
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());
于 2013-07-19T21:31:21.737 回答
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最后一个随机数在哪里。

于 2013-07-19T21:26:13.807 回答
0

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

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

myArray[i] = rNumb;

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

于 2013-07-19T21:26:45.037 回答
0

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

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

于 2013-07-19T21:28:13.190 回答