1
resposta

ajuda com o exercicio

https://github.com/Jonnynho7/monitoradorDeGastos

estou com um problema, toda vez que digito um produto com mais de uma palavra, a ide me retorna o seguinte erro:

Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:977)
at java.base/java.util.Scanner.next(Scanner.java:1632)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2603)
at Main.main(Main.java:18)

alguém pode me ajudar com isso?

1 resposta

Olá amigo.
Esse erro é bem comum quando usamos Scanner.
O que está acontecendo, quase com certeza, é que você está digitando um texto com mais de uma palavra (ex: Coca Cola 2L), mas em algum ponto do código o Scanner está tentando ler um número (nextDouble).
Quando o Scanner encontra letras onde ele esperava um número, ele lança exatamente esse erro:

InputMismatchException

Pelo stack trace, o problema está nesta linha:

Scanner.nextDouble

(linha 18 do seu Main)
Porque:

  • next()apenas até o primeiro espaço
  • nextDouble() espera somente números
  • Se você digita algo como Arroz Branco, o Scanner lê Arroz e já quebra

Para nomes de produtos (texto com espaços) use nextLine(), não next():

Scanner sc = new Scanner(System.in);

System.out.println("Digite o nome do produto:");
String produto = sc.nextLine();

Isso permite:

Arroz Branco Tipo 1

Tem um detalhe importante:
Depois de um nextDouble(), sobra uma quebra de linha no buffer.
O padrão correto é:

double preco = sc.nextDouble();
sc.nextLine(); // limpa o buffer

String produto = sc.nextLine();

Sem esse sc.nextLine() extra, o programa “pula” a leitura do texto.
Se você digitar:

12,50

o Java não aceita por padrão.
Ele espera:

12.50

Ou então configure o locale:

Scanner sc = new Scanner(System.in).useLocale(Locale.US);

Comente ai qualquer duvida.
Bons estudos.