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() lê apenas até o primeiro espaçonextDouble() 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.