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

[Projeto] Fiz a separação da logica de negocio do modelo(CartaoDeCredito) e usei expressão lambda para implementar compareTo

package service;

import models.CartaoDeCredito;
import models.Compra;

public class Operacao {

    public static boolean lancaCompra(Compra compra, CartaoDeCredito cartao) {
        if (cartao.getSaldo() >= compra.getValor()) {
            double novoSaldo = cartao.getSaldo() - compra.getValor();
            cartao.setSaldo(novoSaldo);
            cartao.getCompras().add(compra);
            return true;
        }

        return false;
    }

}
import java.util.Collections;
import java.util.Scanner;
import models.CartaoDeCredito;
import models.Compra;
import service.Operacao;

public class Main {
    public static void main(String[] args) {

        Scanner leitura = new Scanner(System.in);

        System.out.println("Digite o limite do cartão: ");
        double limite = leitura.nextDouble();

        CartaoDeCredito cartao = new CartaoDeCredito(limite);

        int sair = 1;

        while(sair != 0) {
            System.out.println("Digite a descrição da compra:");
            String descricao = leitura.next();

            System.out.println("Digite o valor da compra:");
            double valor = leitura.nextDouble();

            Compra compra = new Compra(descricao, valor);
            boolean compraRealizada = Operacao.lancaCompra(compra, cartao);

            if (compraRealizada) {
                System.out.println("Compra realizada!");
                System.out.println("Digite 0 para sair ou 1 para continuar");
                sair = leitura.nextInt();
            } else {
                System.out.println("Saldo insuficiente!");
                sair = 0;
            }

        }

        System.out.println("***********************");
        System.out.println("COMPRAS REALIZADAS:\n");

        Collections.sort(cartao.getCompras(), (c1, c2) -> c1.getValor().compareTo(c2.getValor()));  

        for (Compra c : cartao.getCompras()) {
            System.out.println(c.getDescricao() + " - " +c.getValor());
        }

        System.out.println("\n***********************");

        System.out.println("\nSaldo do cartão: " +cartao.getSaldo());

        leitura.close();
        
    }
    
}
1 resposta
solução!

Olá, Paulo! Como vai?

A implementação do método lancaCompra na classe Operacao está correta para verificar se o saldo do cartão é suficiente antes de registrar uma compra.

No entanto, gostaria de sugerir algumas melhorias e verificações adicionais:

  1. Validação de Entradas: No método main, ao ler o valor da compra e o limite do cartão, seria interessante adicionar uma verificação para garantir que os valores sejam positivos. Isso evita que valores negativos sejam inseridos acidentalmente.

    double valor;
    do {
        System.out.println("Digite o valor da compra (positivo):");
        valor = leitura.nextDouble();
    } while (valor <= 0);
    
  2. Uso de nextLine para Descrição: Quando você usa next(), ele lê apenas até o próximo espaço. Se a descrição da compra puder conter espaços, considere usar nextLine() após um next() para capturar a descrição completa.

    leitura.nextLine(); // Consumir o restante da linha
    System.out.println("Digite a descrição da compra:");
    String descricao = leitura.nextLine();
    

No mais, bons estudos!