1

何らかの理由で、これは入力された配列のサイズを編集せず、入力された配列にデータが追加されません。

    public static void RandomizeArray(int[] array)
    {
        int intRead;
        int intReadSeed;
        Random randomNum = new Random();
        Console.WriteLine("How many ints do you want to randomly generated?");
        intRead = Convert.ToInt32(Console.ReadLine());
        array = new int[intRead];
        Console.WriteLine("What's the maximum value of the randomly generated ints?");
        intReadSeed = Convert.ToInt32(Console.ReadLine());
        for (int i = 0; i < intRead; i++)
        {
            array[i] = (randomNum.Next(intReadSeed));
        }
        Console.WriteLine("Randomization Complete.\n");
    }
4

2 に答える 2

6

このメソッドに配列を渡すときは、値で渡します。つまり、同じオブジェクトを指すまったく新しい変数を作成します。メソッド内の変数を編集arrayして新しい配列を指すようにしても、他の変数が新しい配列を指すようにはなりません。古い配列を指すままです。arrayしたがって、戻ったとき、渡された に編集を加えていません。

これを修正するreturn array;には、メソッドの最後で署名を からvoidに変更しint[]ます。または、パラメーターとして行うことができるout int[] arrayので、参照渡しして編集します。

于 2013-03-28T01:43:12.293 に答える
3

簡単な修正で、パラメータを として宣言しますout

public static void RandomizeArray(out int[] array)
{
    int intRead;
    int intReadSeed;
    Random randomNum = new Random();

    Console.WriteLine("How many ints do you want to randomly generated?");

    intRead = Convert.ToInt32(Console.ReadLine());
    array = new int[intRead];

    Console.WriteLine("What's the maximum value of the randomly generated ints?");
    intReadSeed = Convert.ToInt32(Console.ReadLine());

    for (int i = 0; i < intRead; i++)
    {
        array[i] = (randomNum.Next(intReadSeed));
    }

    Console.WriteLine("Randomization Complete.\n");
}

そうすれば、次のように呼び出すことができます。

int[] array;

RandomizeArray(out array);

ただし、単純に配列を返す方がよいでしょう。

public static int[] GenerateRandomizedArray()
{
    int intRead;
    int intReadSeed;
    Random randomNum = new Random();

    Console.WriteLine("How many ints do you want to randomly generated?");
    intRead = Convert.ToInt32(Console.ReadLine());
    var array = new int[intRead];

    Console.WriteLine("What's the maximum value of the randomly generated ints?");
    intReadSeed = Convert.ToInt32(Console.ReadLine());

    for (int i = 0; i < intRead; i++)
    {
        array[i] = (randomNum.Next(intReadSeed));
    }

    Console.WriteLine("Randomization Complete.\n");

    return array;
}
于 2013-03-28T01:47:53.147 に答える