3
respostas

Exercicio 13 Aula 3

Meu código está retornando ArrayIndexOutOfBoundsException em qual parte está meu erro.

        String texto = "Socorram-me, subi no ônibus em Marrocos";
        String [] inverte = texto.split(" ");
        for(int i = texto.length() - 1;i >= 0; i --){
            System.out.println(inverte[i]);
        }
3 respostas

O problema está no laço. Tu estás usando o tamanho da String texto (que é 39), quando devias estar usando o tamanho da String inverte (que é 6). Como o laço tenta avançar em um espaço de memória que não pertence a inverte, uma Exceção de ArrayIndexOutOfBoundsException é lançada. Tente esse código:

String texto = "Socorram-me, subi no ônibus em Marrocos";
String [] inverte = texto.split(" ");
for(int i = inverte.length - 1; i >= 0 ; i--){
    System.out.println(inverte[i]);
}

No entanto, me permita dar uma solução alternativa:

final String texto = "Socorram-me, subi no ônibus em Marrocos";

List<String> list = new ArrayList<String>(Arrays.asList(texto.split(" ")));

Collections.reverse(list);
for(final String s : list) 
    System.out.println(s);

Esse código é mais robusto, pois:

  1. garante que os objetos String são referências imutáveis;
  2. evita qualquer checagem direta, delegando essa tarefa à API;
  3. torna o código mais legível quanto à intenção.

Obrigado

Não esquece de marcar a questão como solucionada então.