reverse int数组返回错误的元素

时间:2017-02-15 11:21:21

标签: c# arrays reverse

这是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

5 个答案:

答案 0 :(得分:2)

此处存在问题(int i = 0; i&lt; 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; } 符号

试试这段代码。

@POST
@Path("/save")
@Consumes(MediaType.APPLICATION_JSON)
public boolean putLocation(Location loc) {
    boolean succes = false;
    try {
        System.out.println(loc.toString());
        succes = LocationController.getController().locationSetter().saveLocation(loc);
    } catch (SQLException ex) {
        System.out.println(ex.getMessage());
        Logger.getLogger(LocationResource.class.getName()).log(Level.SEVERE, null, ex);
    }
    return succes;
}

答案 1 :(得分:1)

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

  

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

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

这可能稍微容易理解。我基本上向后运行我的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];
}

答案 2 :(得分:1)

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

使用

using System.Linq;

反转数组

var reverse = array.Reverse();

或者

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

答案 3 :(得分:0)

您不需要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]; } 就足够了。

{{1}}

答案 4 :(得分:0)

试试这个:

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