打印数组的反转时ArrayIndexOutOfBoundsException

时间:2015-05-18 15:03:08

标签: java arrays reverse

在cmd中运行它时会显示错误:

  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:5在Reverse.main(Reverse.java:18)

我的代码是

import java.util.*;
class Reverse
{
    public static void main (String agrs[])
    {
        Scanner sc = new Scanner (System.in);
        int a,r,s;
        System.out.print("Enter Number: ");
        r= sc.nextInt();
        int num[]=new int[r];
        for (a=0;a<r;a++)
        {
            System.out.print("Enter Number: "+(a+1)+":");
            num[a]=sc.nextInt();
        }
        System.out.println("\n Displaying number in reverse order\n-----------\n");
        for (a= num[a]-1;a<0;a--)
        {
            System.out.println(num[a]);
        }
    }
}

由于我是java新手,我对如何解决这个问题感到困惑。

2 个答案:

答案 0 :(得分:2)

问题在这里:

for (a= num[a]-1;a<0;a--){
    System.out.println(num[a]);
}

ArrayIndexOutOfBoundsException表示数组的索引不是num[a] - 1

请改为尝试:

for (a = r - 1; a >= 0; a--){
    System.out.println(num[a]);
}

或使用num.length - 1

for (a = num.length - 1; a >= 0; a--){
   System.out.println(num[a]);
}

答案 1 :(得分:0)

由于mmking的答案,你解决了这个问题。

现在让我们考虑如何使用java 8功能打印数组的反转。

使用数字流

int num[] = { 5, 6, 7, 8 };
IntStream.range(1, num.length + 1).boxed()
        .mapToInt(i -> num[num.length - i])
        .forEach(System.out::println);

使用Collections.reverseOrder

Stream.of(5, 6, 7, 8).sorted(Collections.reverseOrder())
        .forEach(System.out::println);

使用descendingIterator

Stream.of(5, 6, 7, 8).collect(Collectors.toCollection(LinkedList::new))
        .descendingIterator().forEachRemaining(System.out::println);

输出

8
7
6
5