反转int数组return错误的元素

Reverse int array return wrong element

这里有一个简单的C#方法来反转数组的元素。例如,如果我输入 {1,2,3,4},结果应该是 {4,3,2,1}。

public int[] reverse(int[] array)
{
    int[] new_array = new int[array.Length];

    for (int i = 0; i < array.Length-1; i++)
    {
        new_array[i] = array[array.Length-1 - i];
    }
    return new_array;
}

但是,当我 运行 它并给出输入 {1,2,3,4} 时,结果是 {4,3,2,0},为什么最后一个元素变成 0 而不是 1?

您遇到的问题是您正在检查数组长度并减一。

for (int i = 0; i < array.Length - 1; i++)

这表示如果 I 小于数组的长度减一。你永远不会检查数组中的最后一个元素。

这样理解起来可能稍微容易一些。我基本上是 运行 我的 for 循环向后并为新数组和原始数组保留一个计数器。

var array = new int[] { 1, 2, 3, 4 };
int[] new_array = new int[array.Length];

for (int i = array.Length -1, n=0 ; i >= 0 ; i--,n++)
{
    new_array[n] = array[i];
}

此处存在问题 (int i = 0; i < array.Length-1; i++)。 如果要将它与 Length-1 进行比较,则必须使用 <= 或使用 < 符号与 Length

试试这个代码。

public int[] reverse(int[] array)
{
    int[] new_array = new int[array.Length];

    for (int i = 0; i < array.Length; i++)
    {  
        new_array[i] = array[array.Length-1 - i];
    }
    return new_array;
}

你不需要 array.Length-1 因为这会 beyond the index of array 所以只需要 array.Length 就够了。

int[] array = new int[4] { 4, 3, 2, 1 };
int[] new_array = new int[array.Length];
for (int i = 0; i< array.Length; i++)
{
  new_array[i] = array[(array.Length - 1) - i];
}

你可以使用 Linq 而不是写太多行代码

正在使用

using System.Linq;

反转数组

var reverse = array.Reverse();

int[] reverse = array.Reverse().ToArray();

试试这个:

for (int i = array.Length - 1,j=0; i >= 0; i--,j++)
{
  new_array[j] = array[i];
}