Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Erro ao executar importação dos pets do abrigo java.util.NoSuchElementException

Essa é a saída do console, com meus inputs e os outputs do programa. E no final após fazer a importação ele está dando o seguinte erro, como aparece no texto abaixo: java.util.NoSuchElementException

Digite o id ou nome do abrigo: 1 Digite o nome do arquivo CSV: pets.csv Pet cadastrado com sucesso: Rex Pet cadastrado com sucesso: Mia Pet cadastrado com sucesso: Luna Pet cadastrado com sucesso: Felix Pet cadastrado com sucesso: Bella Pet cadastrado com sucesso: Lucy Pet cadastrado com sucesso: Apollo Pet cadastrado com sucesso: Leopoldo

DIGITE O NÚMERO DA OPERAÇÃO DESEJADA: 1 -> Listar abrigos cadastrados 2 -> Cadastrar novo abrigo 3 -> Listar pets do abrigo 4 -> Importar pets do abrigo 5 -> Sair java.util.NoSuchElementException: No line found at java.base/java.util.Scanner.nextLine(Scanner.java:1651) at br.com.alura.AdopetConsoleApplication.main(AdopetConsoleApplication.java:20)

Process finished with exit code 0

Este é o meu código, o que pode estar errado?

package br.com.alura;

import java.util.Scanner;

public class AdopetConsoleApplication {

    public static void main(String[] args) {
        CommandExecutor executor = new CommandExecutor();
        System.out.println("##### BOAS VINDAS AO SISTEMA ADOPET CONSOLE #####");
        try {
            int opcaoEscolhida = 0;
            while (opcaoEscolhida != 5) {
                System.out.println("\nDIGITE O NÚMERO DA OPERAÇÃO DESEJADA:");
                System.out.println("1 -> Listar abrigos cadastrados");
                System.out.println("2 -> Cadastrar novo abrigo");
                System.out.println("3 -> Listar pets do abrigo");
                System.out.println("4 -> Importar pets do abrigo");
                System.out.println("5 -> Sair");

                String textoDigitado = new Scanner(System.in).nextLine();
                opcaoEscolhida = Integer.parseInt(textoDigitado);

                if (opcaoEscolhida == 1) {
                    executor.executeCommand(new ListarAbrigoCommand());
                } else if (opcaoEscolhida == 2) {
                    executor.executeCommand(new CadastrarAbrigoCommand());
                } else if (opcaoEscolhida == 3) {
                    executor.executeCommand(new ListarPetsDoAbrigoCommand());
                } else if (opcaoEscolhida == 4) {
                    executor.executeCommand(new ImportarPetsDoAbrigoCommand());
                } else if (opcaoEscolhida == 5) {
                    break;
                } else {
                    System.out.println("NÚMERO INVÁLIDO!");
                    opcaoEscolhida = 0;
                }
            }
            System.out.println("Finalizando o programa...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
1 resposta
solução!

Olá, Lorenzo! Como vai?

No seu caso, isso pode estar acontecendo porque você está criando uma nova instância do Scanner a cada iteração do loop, e não fechando-a, o que pode levar a esse tipo de problema.

Uma maneira de resolver isso é criar uma única instância do Scanner no início do seu método main e usá-la durante todo o tempo de execução do programa. Além disso, lembre-se de fechar o Scanner ao final para liberar os recursos. Aqui está um exemplo de como você pode modificar seu código:

package br.com.alura;

import java.util.Scanner;

public class AdopetConsoleApplication {

    public static void main(String[] args) {
        CommandExecutor executor = new CommandExecutor();
        Scanner scanner = new Scanner(System.in); // Cria uma única instância do Scanner
        System.out.println("##### BOAS VINDAS AO SISTEMA ADOPET CONSOLE #####");
        try {
            int opcaoEscolhida = 0;
            while (opcaoEscolhida != 5) {
                System.out.println("\nDIGITE O NÚMERO DA OPERAÇÃO DESEJADA:");
                System.out.println("1 -> Listar abrigos cadastrados");
                System.out.println("2 -> Cadastrar novo abrigo");
                System.out.println("3 -> Listar pets do abrigo");
                System.out.println("4 -> Importar pets do abrigo");
                System.out.println("5 -> Sair");

                String textoDigitado = scanner.nextLine(); // Usa a mesma instância do Scanner
                opcaoEscolhida = Integer.parseInt(textoDigitado);

                if (opcaoEscolhida == 1) {
                    executor.executeCommand(new ListarAbrigoCommand());
                } else if (opcaoEscolhida == 2) {
                    executor.executeCommand(new CadastrarAbrigoCommand());
                } else if (opcaoEscolhida == 3) {
                    executor.executeCommand(new ListarPetsDoAbrigoCommand());
                } else if (opcaoEscolhida == 4) {
                    executor.executeCommand(new ImportarPetsDoAbrigoCommand());
                } else if (opcaoEscolhida == 5) {
                    break;
                } else {
                    System.out.println("NÚMERO INVÁLIDO!");
                    opcaoEscolhida = 0;
                }
            }
            System.out.println("Finalizando o programa...");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            scanner.close(); // Fecha o Scanner no final
        }
    }
}

Espero que essa alteração ajude a resolver o problema que você está enfrentando.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.