我正在尝试制作一个反转数组的方法,我不知道它为什么不起作用?
当我说int[] arr = array,我想这样做,所以它不会受到影响所以我可以使用元素的第二个for循环,它应该有元素{1,2,3,4,5,6},但当我使用
for (int i=array.Length-1;i>array.Length/2;i--)
{
array[i] = arr[array.Length - 1 - i];
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我有6个元素,因此array.Length是6,因为我从开始array.Length-1就必须从最后一个元素开始,它必须是array[5]=arr[6-1-5]必须是array[5]=arr[0]和arr[0]为1,但我认为这是他得到了为6,为什么呢?
这是完整的代码:
// ReverseArray method
static int [] ReverseArray(int [] array)
{
int[] arr = array;
for (int i=0; i<array.Length/2;i++)
{
array[i] = array[array.Length-1 - i];
}
for (int i=array.Length-1;i>array.Length/2;i--)
{
array[i] = arr[array.Length - 1 - i];
}
return array;
}
// Method for displaying elements of Array
static void DisplayArray(int [] array)
{
int i;
Console.Write("{");
for (i = 0; i < array.Length-1; i++)
{
Console.Write(array[i] + ",");
}
Console.WriteLine(array[i] + "}");
}
static void Main(string[] args)
{
int[] array = { 1, 2, 3, 4, 5 ,6};
ReverseArray(array);
DisplayArray(array);
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
您的反转的方法是无效的:而不是交换在索引元件i以及array.Length-1 - i,代码副本阵列的尾部到初始一个,从而有效地"折叠"的阵列在其自身上.
您需要删除第二个循环,并用swap替换赋值:创建一个临时变量,存储array[i],复制array[array.Length-1 - i],然后在其位置写入临时变量.
我无法自拔,但开始写一段代码试图解决它.
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
arr = Reverse(arr).ToArray();
Run Code Online (Sandbox Code Playgroud)
这是实现这一目标的更短途径.
public IEnumerable<int> Reverse(int[] arr)
{
for (int i = arr.Length-1; i >= 0; i--)
{
yield return arr[i];
}
}
Run Code Online (Sandbox Code Playgroud)