创建逆序数组

时间:2013-11-26 19:12:26

标签: java arrays

我在创建反向排序数组时遇到问题。这是我写的代码:

public static int[] makeReverse(int number) {
    int[] rorder = new int[number];
    int j = rorder.length;

    for (int i = 0; i < rorder.length-1; i++) {

        rorder[j] = i;
        j--;
    }

    return rorder;  

但是当我尝试运行它时出现java.lang.ArrayIndexOutOfBoundsException错误。我找不到错误。

7 个答案:

答案 0 :(得分:2)

您可以将j初始化为rorder.length,然后访问rorder[j]。这显然是不可能的。您无法访问索引arr.length。将j更改为rorder.length - 1将解决此异常。

即使异常得到解决,您所做的并不是反转数组。你只是将数字从rorder.length - 2填充到0从第一个索引到第二个索引(我说最后一个,b&#39;因为你的循环只迭代到最后一个索引)。

你应该做的是,迭代到数组长度的一半,并从头开始交换元素:

for (int i = 0; i < arr.length / 2; ++i) {
    // swap arr[i] with arr[arr.length - i - 1]
}

答案 1 :(得分:1)

引用this post您可以使用ArrayUtils:

  

使用Commons.Lang,您只需使用

即可
ArrayUtils.reverse(int[] array)
     

大多数情况下,轻松坚持下来更快,更安全   可用的库已经过单元测试和用户测试   照顾你的问题。

答案 2 :(得分:1)

试试这个,将你的号码作为输入参数传递

int[] reverse(int input){
    int[] reverse = new int[input];
    int x = 0;
    for(int i = input; i>0; i--){
         reverse[x] = i;
         x++;
    }
    return reverse;
}

它会生成从intinput

1数组

答案 3 :(得分:0)

在你的方法中,你必须改变这一行:

int j = rorder.length;

int j = rorder.length-1;

因为rorder.length将返回数组的大小,但最大数组索引比数组大小小1(因为数组索引从0开始)。

答案 4 :(得分:0)

假设使用makeReverse(5)调用此方法,您将创建长度为rorder的{​​{1}}。

使用索引5,您可以0,1,2,3,4 (remember arrays start at 0)

然后,在你的for循环的第一行,你调用j = rorder.length (with is the same as number which is 5),它不存在。

答案 5 :(得分:0)

你可以这样做:

public static void main(final String[] args) {
    final int[] rorder = makeReverse(6);
    System.out.println(Arrays.toString(rorder));
}

public static int[] makeReverse(final int number) {
    final int[] rorder = new int[number];
    for (int i = number; --i > 0;) {
        rorder[i % number] = i;
    }
    return rorder;
}

输出:

[0, 1, 2, 3, 4, 5]

答案 6 :(得分:0)

更改

int j = rorder.length;

for (int i = 0; i < rorder.length-1; i++) {

int j = rorder.length - 1; //Comment 1

for (int i = 0; i < rorder.length; i++) { //comment 2
  1. 否则在第一次迭代时将分配给j [4] - 最大值为j [3]。

  2. for循环在代码中进行的迭代次数太少,例如,如果“number”为5,“j”将递减为0但是循环将退出,因此rorder [0]将不会分配值为4。