2015-05-18 4 views
0

При запуске его в ЦМД он показывает сообщение об ошибке:ArrayIndexOutOfBoundsException при печати реверс массива

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 at 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, я запутался о том, как почини это.

+0

ява равна нулю на основе – KevinDTimm

+1

я бы настоятельно предложил сделать привычку использовать более описательные имена переменных. Это помогает значительно упростить чтение кода. – Dragondraikk

+0

спасибо Dragondraikk, я буду помнить это в следующий раз, когда напишу код .... :) –

ответ

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

или чтобы остаться в его схеме, используйте 'num.length -1' –

+0

@MuratK. Благодарю. Я добавил это в свой ответ. – mmking

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 
Смежные вопросы