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;请在方法结束时将签名从 更改voidint[]。或者您可以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 回答