我将此作为主要
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);
}
然后我尝试创建自己的反向方法,然后我就卡住了
答案 0 :(得分:4)
从
开始工作public static int Reverse(Array M)
{
return Reverse(M);
}
你有两个问题。
return Array.Reverse(M);
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”来完成此操作。
您目前正在做的是基本上颠倒您的数组副本,该副本永远不会传回给调用者。