int数组的反转方法

时间:2008-11-10 20:34:20

标签: c# arrays

我将此作为主要

int[] M ={ 10, 2, 30, 4, 50, 6, 7, 80 };

MyMath.Reverse(M);

for (int i = 0; i < M.Length; i++)

    Console.WriteLine(M[i].ToString() + ", ");

在我创建了MyMath类后,我制作了反向方法

public int Reverse(Array M)
 {
     int len = M.Length;
       for (int i = 0; i < len / 2; i++) 
       {
           int temp = M[i]; M[i] = M[len - i - 1]; M[len - i - 1] = temp;

       }           
 }

但我确定这是错误的,因为它不起作用:-)所以你有不同的代码可以用反向方法编写吗?

注意:我不想在Array类中使用内置的Reverse


是的,当我使用内置的反向方法我得到了这个错误

由于StackOverflowException,进程终止。

那是我把方法写成

之后的
public static int Reverse(Array M)
{
    return Reverse(M);
}

然后我尝试创建自己的反向方法,然后我就卡住了

4 个答案:

答案 0 :(得分:4)

开始工作
public static int Reverse(Array M)
{
    return Reverse(M);
}

你有两个问题。

  1. 反向(M)看起来和你所处的功能相同,所以你正在调用你自己调用的新函数,它调用自身等等,导致堆栈溢出。更改为return Array.Reverse(M);
  2. Array.Reverse会返回一个空格,所以如果你需要返回一个int(不确定它应该在这里是什么),你需要自己提供。或者将您的 Reverse功能更改为void

答案 1 :(得分:2)

要解决您的问题,请将您的方法更改为:

// the built-in returns void, so that needed to be changed...
public static void Reverse(Array M)
{
    Array.Reverse(M); // you forgot to reference the Array class in yours
}

那里没有Stack Overflow问题。

答案 2 :(得分:0)

接下来没有意义不使用Array.Reverse。 但是如果你真的想要这样做,一个选项可能是将数组复制到一个堆栈中,虽然我不相信这很快(但我还没有对它进行分析):

private void Whatever()
{
    int[] M = { 10, 2, 30, 4, 50, 6, 7, 80 };
    ReverseArray(ref M);

}

private void ReverseArray(ref int[] input)
{
    Stack<int> tmp = new Stack<int>();
    foreach (int i in input)
    {
        tmp.Push(i);
    }
    input = tmp.ToArray();
}

答案 3 :(得分:-3)

您需要将数组作为参考传递给您。在C#中,您可以在声明参数时使用关键字“ref”来完成此操作。

您目前正在做的是基本上颠倒您的数组副本,该副本永远不会传回给调用者。