1
resposta

Problemas com lista.

Bom dia! Estou tentando solucionar uma parte de um desafio. Nesse desafio eu tenho que percorrer uma lista de comandos, e onde existir "X" na posição e antes dele existir uma letra eu tenho que remover as duas posições da lista. Logo criei o seguinte código:

Para executar esse procedimento eu criei o seguinte código:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Drone {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("Entre com o comando: ");
        String entrada = sc.nextLine();

        ArrayList<String> posicoes = new ArrayList<String>(Arrays.asList(entrada.toUpperCase().split("")));


        //Se tiver um X e antes do X tiver uma letra remova o X e a Letra:
        for (int i = 0; i < posicoes.size(); i++) {
            if (posicoes.get(i).equalsIgnoreCase("X") && posicoes.get(i-1).matches("[A-Z]*")){
                posicoes.remove(i);
                posicoes.remove(i - 1 );
            }
        }

        for (int j = posicoes.size()-1; j > 0 ; j--) {
            if (posicoes.get(j).equalsIgnoreCase("X") && posicoes.get(j-1).matches("[A-Z]*")){
                posicoes.remove(j);
                posicoes.remove(j - 1 );
            }


        }

O comando de entrada é? AABBXX No debug eu consigo obter a resposta, só que no fim da execução ocorre o seguinte erro:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 2 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) at java.base/java.util.Objects.checkIndex(Objects.java:372) at java.base/java.util.ArrayList.get(ArrayList.java:459) at Drone.main(Drone.java:27) Disconnected from the target VM, address: '127.0.0.1:49907', transport: 'socket'

Process finished with exit code 1

1 resposta

Olá William, tudo bem?

Pelo erro apresentado, parece que o problema está ocorrendo na linha 27 do seu código, quando você está tentando acessar uma posição do ArrayList que não existe. Isso pode estar acontecendo porque você está tentando acessar a posição "-1" no seu primeiro if, quando i = 0 e você tenta acessar a posição i-1.

Para resolver esse problema, você pode adicionar uma condição no seu primeiro if para verificar se i é maior que 0, assim você evita de tentar acessar uma posição que não existe. Ficaria assim:

if (i > 0 && posicoes.get(i).equalsIgnoreCase("X") && posicoes.get(i-1).matches("[A-Z]*")){

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software