1
resposta

fiquei em duvida pq o meu nao vai quando o valor nao e inteiro

import Models.Cartao;
import Models.Compra;

import java.util.Collections;
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: ");
        Cartao cartao = new Cartao(leitura.nextDouble());
        int i = 1;
        while ( i != 0){
            System.out.println("Digite Nome Do Item Comprado: ");
            String description = leitura.next();

            System.out.println("Digite Valor Do Item Comprado:  ");
            double valor = leitura.nextDouble();

            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());
    }
}

import java.util.ArrayList;
import java.util.List;

public class Cartao {
    private double limiteCartao;
    private List<Compra> compras;

    public Cartao (double limiteCartao) {
        this.limiteCartao = limiteCartao;
        this.compras = new ArrayList<>();
    }

    public double getLimiteCartao() {
        return limiteCartao;
    }

    public List<Compra> getCompras() {
        return compras;
    }

    public void adicionarCompra (Compra compra) {
        if (limiteCartao >= compra.getPreco()){
            limiteCartao -= compra.getPreco();
            compras.add(compra);
            System.out.println("Compra Realizada");
            System.out.println("Limite Disponivel " + limiteCartao);
        }else {
            System.out.println("Compra Superior ao Limite Disponivel " + limiteCartao);
        }
    }

}
    package Models;

public class Compra implements Comparable<Compra>{
    private String nomeProduto;
    private double preco;

    public Compra(String nomeProduto, double preco) {
        this.nomeProduto = nomeProduto;
        this.preco = preco;
    }

    public String getNomeProduto() {
        return nomeProduto;
    }


    public double getPreco() {
        return preco;
    }


    @Override
    public String toString() {
        return "\n Compra \n" +
                "Nome Produto: " + nomeProduto + '\n' +
                "Preco: " + preco;
    }

    @Override
    public int compareTo(Compra outraCompra) {
        return Double.valueOf(this.preco).compareTo(Double.valueOf(outraCompra.preco));
    }
}
1 resposta

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 ✓.