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

[Projeto] Minha solução para o desafio

Gostaria de compartilhar o meu Spaghetti code que surpreendentemente funciona. A instrutora Jacqueline fez parecer tão fácil, quando assisti a solução dela vi que tenho muito a aprender.

package curso3.horadapratica5.desafiofinal;

import java.util.Scanner;

public class Cartao {
    private double limiteCartao;

    public double getLimiteCartao() {
        return limiteCartao;
    }

    public void setLimiteCartao(double limiteCartao) {
        this.limiteCartao = limiteCartao;
    }

    public void inicia(){
        Scanner scanner = new Scanner(System.in);
        System.out.print("Digite o limite do cartão: ");
        setLimiteCartao(scanner.nextDouble());
    }

    @Override
    public String toString() {
        return "Limite: " + limiteCartao;
    }
}
package curso3.horadapratica5.desafiofinal;

import java.util.Scanner;

public class Compra extends Cartao implements Comparable<Compra> {
    private String descricaoCompra;
    private double valorCompra;
    int continuarComprando = 1;

    public Compra(double limiteCartao) {
        super.setLimiteCartao(limiteCartao);
    }

    public String getDescricaoCompra() {
        return descricaoCompra;
    }

    public void setDescricaoCompra(String descricaoCompra) {
        this.descricaoCompra = descricaoCompra;
    }

    public double getValorCompra() {
        return valorCompra;
    }

    public void comprar(){
        Scanner scanner = new Scanner(System.in);
        System.out.print("Descrição da compra: ");
//        scanner.nextLine(); //se não colocar isso volta String vazia // aqui funciona sem precisar disso, alguma coisa com double
        setDescricaoCompra(scanner.nextLine());
        System.out.print("Valor da compra: ");
        double checkSaldo = (scanner.nextDouble());
        if (getLimiteCartao() >= checkSaldo){
            valorCompra = checkSaldo;
            System.out.println();
            System.out.println("Compra Realizada!");
            setLimiteCartao(getLimiteCartao() - valorCompra);
        } else {
            System.out.println();
            System.out.println("Saldo insuficiente.");
        }
    }

    public void mensagem(){
        Scanner scanner = new Scanner(System.in);
        String mensagem = """
                    
                    Limite atual: %.2f
                    """.formatted(getLimiteCartao());
        System.out.println(mensagem);
        if (getLimiteCartao() == 0) {
            System.out.println("Sem saldo para continuar comprando.");
            System.out.println();
            continuarComprando = 0;
            return;
        }
        System.out.println("1 - Continuar comprando.");
        System.out.println("0 - Sair.");
        System.out.println();
        System.out.print("Opção: ");
        continuarComprando = scanner.nextInt();
        System.out.println();
    }

    @Override
    public String toString() {
        return "Limite: " + getLimiteCartao() + " | Valor da compra: " + getValorCompra() + " | Descrição: " + descricaoCompra;
    }

    @Override
    public int compareTo(Compra o) {
        if (this.valorCompra > o.getValorCompra()) {
            return 1;
        } else if (this.valorCompra < o.getValorCompra()) {
            return -1;
        } else return 0;
    }
}
package curso3.horadapratica5.desafiofinal;

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

public class Main {
    public static void main(String[] args) {
        List<Compra> compras = new ArrayList<>();

        Cartao cartao = new Cartao();
        cartao.inicia();

        while (true) {
            Compra compra = new Compra(cartao.getLimiteCartao());
            compra.comprar();
            cartao.setLimiteCartao(compra.getLimiteCartao());        //Que horror, pesquisar como fazer isso melhor
            compras.add(compra);
            compra.mensagem();
            if (compra.continuarComprando == 0){
                break;
            }
        }

        Collections.sort(compras);
        System.out.println("Valores em ordem crescente:");


        for (Compra o: compras) {
            System.out.println(o.getDescricaoCompra() + " | " + o.getValorCompra());
        }
    }
}
1 resposta
solução!

Oi, Jhonathan! Tudo bem?

Que gratificante receber esse feedback! Excelente código, parabéns pelo projeto! Colocar em execução as atividades propostas pelo professor em aula é uma prática muito importante para internalizarmos o conteúdo. Caso tenha ficado alguma dúvida em relação ao curso ou atividade, sinta-se à vontade em comunicar, estou à disposição e ficarei super feliz em poder ajudar!

Um forte abraço e bons estudos!