Oi Amanda! Tudo bem?
Pelo que entendi, você está enfrentando problemas quando o valor inserido não é um número inteiro. Isso pode estar acontecendo porque o método nextDouble()
do Scanner
espera um valor numérico e lança uma exceção se o valor fornecido não puder ser convertido para um double
.
Para resolver isso, você pode adicionar um tratamento de exceção para capturar entradas inválidas e solicitar que o usuário insira um valor válido. Aqui está um exemplo de como você pode fazer isso:
import Models.Cartao;
import Models.Compra;
import java.util.Collections;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Principal {
public static void main(String[] args) {
Scanner leitura = new Scanner(System.in);
System.out.println("Digite O Limite Do Cartão: ");
double limiteCartao = 0.0;
// Tratamento de exceção para o limite do cartão
while (true) {
try {
limiteCartao = leitura.nextDouble();
break;
} catch (InputMismatchException e) {
System.out.println("Por favor, insira um valor numérico válido para o limite do cartão.");
leitura.next(); // Limpa a entrada inválida
}
}
Cartao cartao = new Cartao(limiteCartao);
int i = 1;
while (i != 0) {
System.out.println("Digite Nome Do Item Comprado: ");
String description = leitura.next();
double valor = 0.0;
// Tratamento de exceção para o valor do item comprado
while (true) {
try {
System.out.println("Digite Valor Do Item Comprado: ");
valor = leitura.nextDouble();
break;
} catch (InputMismatchException e) {
System.out.println("Por favor, insira um valor numérico válido para o valor do item.");
leitura.next(); // Limpa a entrada inválida
}
}
Compra compras = new Compra(description, valor);
cartao.adicionarCompra(compras);
System.out.println("Deseja Continuar Comprando 1 - Sim 0 - Não :");
i = leitura.nextInt();
}
Collections.sort(cartao.getCompras());
System.out.println("Lista de compras Realizadas: ");
for (Compra compra : cartao.getCompras()) {
System.out.println(compra.getNomeProduto() + " " + compra.getPreco());
}
System.out.println("Limite Disponivel: " + cartao.getLimiteCartao());
}
}
Neste exemplo, adicionei um loop while
com tratamento de exceção try-catch
para garantir que o usuário insira um valor numérico válido tanto para o limite do cartão quanto para o valor do item comprado. Isso deve resolver o problema que você está enfrentando.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.