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

2 番目の for ループで値を上書きしていましたが、

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

配列の各インデックスに現在の乱数を書き込みます。最後の乱数は前の乱数を上書きするため、配列で使用できる唯一の数値であるため、最大として宣言されます。

代わりにこれを試してください:

    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 ループの最後の反復で生成された最後の乱数に設定するためです。

MaxValue Console.WriteLine(myArray[i]);() に渡す配列の値が実際に何であるかについて、誤った印象を与えています!

于 2013-07-19T21:28:13.190 に答える