Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Projeto] Meu Desafio

Bom dia, consegui finalizar o desafio e segue abaixo a minha solução

Minha classe CartaoDeCredito

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

public class CartaoDeCredito {
    private double limite;
    private double saldo;
    private List<Compra> compras;

    public CartaoDeCredito(double limite) {
        this.limite = limite;
        this.saldo = limite;
        this.compras = new ArrayList<>();
    }
    public List<Compra> getCompras() {
        return compras;
    }

    public double getLimite() {
        return limite;
    }

    public double getSaldo() {
        return saldo;
    }

    public boolean lancarCompra(Compra compra){
        if(this.saldo > compra.getValor()){
            this.saldo -= compra.getValor();
            this.compras.add(compra);
            return true;
        }
            return false;
    }

    public void addCompra(Compra compra){
        this.compras.add(compra);
    }
}

Minha classe Compra

public class Compra implements Comparable<Compra>{

    private String descricao;
    private double valor;
    public Compra(String descricao, double valor) {
        this.descricao = descricao;
        this.valor = valor;
    }

    public String getDescricao() {
        return descricao;
    }

    public double getValor() {
        return valor;
    }

    @Override
    public String toString() {
        return "Produto = " + getDescricao() + ", valor= " + getValor() + "\n";
    }

    @Override
    public int compareTo(Compra outroValor) {
        return Double.valueOf(this.valor).compareTo(Double.valueOf(outroValor.valor));
    }
}

Minha classe principal

import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println("--------------- ");
        System.out.println("Menu de compras");
        System.out.println("--------------- \n");

        Scanner scan = new Scanner(System.in);
        int numeroDigitado = 1;


        System.out.println("Digite o limite do seu cartao");
        double n = scan.nextDouble();
        CartaoDeCredito credito = new CartaoDeCredito(n);

        while(numeroDigitado == 1)
        {

//      System.out.println(" O saldo do seu cartao de crédito é: " + credito.getLimite());

            System.out.println("Digite o nome do produto que deseja");
            String nome = scan.next();

            System.out.println("Digite o valor do produto");
            double valor = scan.nextDouble();

            Compra victorProdutos = new Compra(nome, valor);

            if(credito.lancarCompra(victorProdutos))
            {
                Collections.sort(credito.getCompras());
                System.out.println("Compra realizada com sucesso");
                System.out.println("Digite 0 para sair ou 1 para continuar");
                numeroDigitado = scan.nextInt();
                if (numeroDigitado == 0){
                    System.out.println("Compras realizadas: \n" + credito.getCompras());
                }
            }

            else
            {
                System.out.println("Saldo insuficiente");

                if(credito.getCompras().isEmpty())
                {
                    System.out.println("O seu carrinho está vazio, você não adicionou produtos.");
                }

                else
                {
                    System.out.println("Compras realizadas: \n" + credito.getCompras());
                }
                System.out.println("Saldo do cartão de crédito " + credito.getSaldo());
            }
        }
    }
}

Gostei do desafio, acho que minha principal dificuldade é sempre iniciar pra modelar a classe, saber o que de fato é necessário para implementar o negócio, depois que modelei a classe consegui prosseguir muito bem no que necessitava o desafio de acordo com o que a Jack passou pra gente.

3 respostas

Acho que vou ainda realizar as validações, já que ainda ocorre algumas exceptions quando eu insiro espaços, valores em campos distintos e etc. E tentar separar por métodos pra ficar mais legível e sem tanto if e else. Tentei também indentar melhor pra ficar legível e deixar as chaves bem visíveis pra ficar fácil o entendimento.

solução!

Olá, Victor!

Parabéns por finalizar o desafio! Fico feliz em ver que você conseguiu modelar a classe e implementar as funcionalidades necessárias.

Pelo que entendi, sua principal dificuldade foi iniciar a modelagem da classe e entender o que era necessário para implementar o negócio. Isso é muito comum, principalmente quando estamos começando. É importante ter uma boa compreensão do problema e dos requisitos antes de começar a escrever o código.

No seu caso, você criou duas classes principais: CartaoDeCredito e Compra. A classe CartaoDeCredito representa o cartão de crédito em si, com seus atributos (limite, saldo e lista de compras) e métodos (como lancarCompra e addCompra). A classe Compra representa uma compra realizada, com seus atributos (descrição e valor) e o método compareTo para permitir a ordenação.

Na classe principal Main, você implementou o menu de compras usando um loop while e a classe Scanner para ler as entradas do usuário. A cada compra, você verifica se é possível lançá-la no cartão de crédito (usando o método lancarCompra da classe CartaoDeCredito). Se for possível, a compra é adicionada à lista de compras e a lista é ordenada usando Collections.sort. Caso contrário, é exibida uma mensagem de saldo insuficiente.

É importante ressaltar que o código que você compartilhou está funcionando corretamente e fazendo o que foi proposto no desafio. No entanto, sempre é possível melhorar e refatorar o código. Por exemplo, você poderia separar a lógica do menu em um método separado para deixar o código principal mais limpo e organizado.

Além disso, é interessante pensar em cenários de teste diferentes para garantir que o código está funcionando corretamente em todas as situações. Por exemplo, você poderia testar o caso em que o saldo é igual ao limite do cartão, ou quando o saldo é menor que o valor da compra e a lista já possui algumas compras.

Espero ter ajudado a esclarecer suas dúvidas e que você tenha aprendido bastante com esse desafio. Continue praticando e estudando, pois a prática é fundamental para o desenvolvimento das habilidades de programação.

Se tiver mais alguma dúvida, é só me dizer! Estou aqui para ajudar.

Espero ter ajudado e bons estudos!

Obrigado Matheus, eu queria entregar logo o que o desafio estava propondo e depois iria verificar todos os pontos possíveis de melhoria como comentei anteriormente, irei verificar esses pontos que citou, mas já estava ciente de alguns exceptions. Muito obrigado.