函数不返回反转数组

时间:2016-01-11 19:27:57

标签: c# arrays function return

作为C#的新手,我尝试用方法反转数组。但它不会返回反转阵列。我试了几个小时,但仍然没有得到它我做错了。整个过程是从我购买的“C#玩家指南 - 第2版”一书中吸取教训。不幸的是,课程的解决方案没有包含在书中。 Main方法是预定义的,应该像您看到的那样使用。

如果我在for循环内输出它是54321,这没关系。但正确的输出应来自PrintNumbers方法。而且存在问题,因为输出12345没有反转

这是代码,请告诉我你是否看到了不好的东西。

class Program
{
    static void Main(string[] args)
    {
        int[] numbers = GenerateNumbers();
        Reverse(numbers);
        PrintNumbers(numbers);

        Console.ReadKey();
    }

    //Generate the array and return the numbers
    static int[] GenerateNumbers()
    {
        int[] temp;
        temp = new int[] { 1, 2, 3, 4, 5 };
        return temp;
    }

    //Reverse the numbers in the array
    static int[] Reverse(int[] numbersToSwap)
    {
        //Write array length in value to decrement later
        int numbersLenghtMax = numbersToSwap.Length;
        //Minus 1 because an array starts with 0
        numbersLenghtMax--;

        //Create a temp value to store last value of array
        int[] temp = new int[numbersToSwap.Length];

        for (int index = 0; index < numbersToSwap.Length; index++)
        {
            //Store values reversed in the temp value
            temp[index] = numbersToSwap[numbersLenghtMax];
            numbersLenghtMax--;

            //This output is correct
            Console.Write(temp[index]);
        }
        Console.WriteLine();
        //The returned array is not reversed
        return temp;

    }

    //Print out the numbers
    static void PrintNumbers(int[] numbers)
    {
        foreach (int number in numbers)
            Console.Write(number);
    }
}

4 个答案:

答案 0 :(得分:6)

您的int[]方法返回int[] numbers = GenerateNumbers(); numbers = Reverse(numbers); //Assign the return value to the numbers variable PrintNumbers(numbers); Console.ReadKey(); (反转数组的结果),但您没有使用此类返回值。

像这样使用:

{{1}}

答案 1 :(得分:4)

它返回值:

static int[] Reverse(int[] numbersToSwap)
{
    // other code

   return temp;
}

你只是没有对返回值做任何事情:

Reverse(numbers);

您必须返回的值分配给某些内容:

numbers = Reverse(numbers);

答案 2 :(得分:2)

您的函数正在返回反向数组,但您没有使用它。

该函数返回一个包含反转数组的新变量(temp),您需要将此返回值存储在某处。

int[] numbers = GenerateNumbers();
Reverse(numbers);  // You pass in the numbers array & are returned a reversed version of it
PrintNumbers(numbers); // You print the original unmodified numbers array

您的Reverse函数根本不会修改数字数组。相反,它返回一个新变量,表示函数末尾存储在temp中的内容。

您可能希望更新代码以使用返回值,如下所示:

int[] numbers = GenerateNumbers();
numbers = Reverse(numbers);
PrintNumbers(numbers);

答案 3 :(得分:-1)

声明并设置数组元素值:

int[] array = new int[] { 1, 3, 5, 7, 9 };

数组的反向元素:

Array.Reverse(array);

请参阅: https://msdn.microsoft.com/en-us/library/d3877932(v=vs.110).aspx