1

このコードは、0 から 1000 までの 100 個の乱数を生成し、生成された偶数値の数と、値の最小値、最大値、および範囲を表示するために作成されました。

コンパイルすると、割り当てられていない minInt と maxInt のローカル変数の使用に関するエラーが発生します。ジェネレーターから割り当てられた変数を取得することになっていますが、何が間違っていましたか?

using System;
using System.Windows.Forms;

namespace ConsoleApplication27
{
    class Program
    {
        static void Main(string[] args)
        {
            int evenNumbers = 0;
            int minInt;
            int maxInt;
            int range;
            string result;

            range = maxInt - minInt;

            result = "Even numbers:\t" + evenNumbers;
            result += "\nMin number:\t" + minInt;
            result += "\nMax number:\t" + maxInt;
            result += "\nRange of number:\t" + maxInt + " - " + minInt + " = " + range;

            DisplayResults(result);
        }

        static void GenerateNumbers(int evenNumbers,  int minInt,  int maxInt,  int range)
        {
            //creating 100 element array
            //and using the random function to fill it
            int[] randomNumbers = new int[100];
            Random number = new Random();
            int randy;
            for (int i = 0; i < randomNumbers.Length; i++)
            {
                randy = number.Next(1000);
                randomNumbers[i] = randy;
                if (randy < minInt)
                {
                    minInt = randy;
                }
                else
                    if (randy > maxInt)
                    {
                        maxInt = randy;
                    }
                if (randomNumbers[i] % 2 == 0)
                {
                    evenNumbers++;
                }
            }
        }
        static void DisplayResults(string outcome)
        {
            MessageBox.Show(
            outcome, "results!",
            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
4

1 に答える 1

1

あなたの主な問題は、乱数を決して割り当てないことだと思いますrandy

int randy;
for (int i = 0; i < randomNumbers.Length; i++)
{
    randy = number.Next(1000);
    randomNumbers[i] = randy

編集:これもコンパイルできることに驚いています。初期化されていない変数を使用しようとしたことについて不平を言うべきではありませんでしたか?

編集:さらに、メソッドに値を割り当てる必要があります。これらの修正後、コンパイルする必要があります(ただし、結果を呼び出したり収集したりしないため、必要な結果は得られません。そのためには、次を使用する必要があります:minIntmaxIntMainGenerateNumbersref

int evenNumbers = 0;
int minInt = Int32.MaxValue;
int maxInt = Int32.MinValue;
int range;
string result;

GenerateNumbers(ref evenNumbers, ref minInt, ref maxInt);

range = maxInt - minInt;



result = "Even numbers:\t" + evenNumbers;
result += "\nMin number:\t" + minInt;
result += "\nMax number:\t" + maxInt;
result += "\nRange of number:\t" + maxInt + " - " + minInt + " = " + range;

DisplayResults(result);

次に、あなたのGenerateNumbers方法:

static void GenerateNumbers(ref int evenNumbers,  ref int minInt,  ref int maxInt)
{
    //creating 100 element array
    //and using the random function to fill it
    int[] randomNumbers = new int[100];
    Random number = new Random();
    int randy;
    for (int i = 0; i < randomNumbers.Length; i++)
    {
        randy = number.Next(1000);
        randomNumbers[i] = randy;
        if (randy < minInt)
        {
            minInt = randy;
        }
        else
            if (randy > maxInt)
            {
                maxInt = randy;
            }
        if (randomNumbers[i] % 2 == 0)
        {
            evenNumbers++;
        }
    }
}

(rangeパラメータは使わないので抜きました)

minIntまた、変数とmaxInt変数を最初に最大値/最小値に設定していることにも注意してください。これは、最初のランダム値を取得し、その後それを更新し続けることを意味します。

EDIT:ジェネレーターコードも少しきれいにしました。if < elseif >乱数が少なすぎて範囲が小さすぎる場合、または生成された各乱数が降順である場合、「else if (randomNumber > maxInt」チェックが決して行われない可能性が高いというコーナーケース条件があるため、チェックに注意してください。実行する。

static void GenerateNumbers(ref int evenNumbers,  ref int minInt,  ref int maxInt)
{
    Random numberGenerator = new Random();
    for (int i = 0; i < 100; i++)
    {
        int randomNumber = numberGenerator.Next(1000);

        if (randomNumber < minInt)
            minInt = randomNumber;

        if (randomNumber > maxInt)
            maxInt = randomNumber;

        if (randomNumber % 2 == 0)
            evenNumbers++;
    }
}
于 2012-10-15T20:25:37.643 に答える