2
respostas

[PROJETO] Desafio

Bom esta foi a maneira que eu fiz. Me parece estar funcionando normalmente, mas não sei se está de acordo com as boas práticas. Separei a classe CartaoDeCredito e a Classe Principal por: "====="

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

public class CartaoDeCredito {

private double limite;
private List<Double> valorDoProduto;
private List<String> produto;
//Construtor:
public CartaoDeCredito(double limite) {
    this.limite = limite;
    this.valorDoProduto = new ArrayList<>();
    this.produto = new ArrayList<>();
}

//Getters & Setters:
public double getLimite() {
    return limite;
}

public List<Double> getValorDoProduto() {
    return valorDoProduto;
}

public List<String> getProduto() {
    return produto;
}

//Métodos:
public void compra(double valor, String nomeDoProduto) {
    if (this.limite > valor) {
        this.limite -= valor;
        valorDoProduto.add(valor);
        produto.add(nomeDoProduto);
        System.out.println("Compra Realizada !");
    } else {
        System.out.println("Saldo Insuficiente");
    }
}

}

===============================================================

import br.com.alura.compras.modelos.CartaoDeCredito;

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

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

    Scanner entrada = new Scanner(System.in);

    System.out.print("Limite do Cartão de Crédito: R$");
    double valorLimite = entrada.nextDouble();

    CartaoDeCredito cliente = new CartaoDeCredito(valorLimite);
    double valorTotal = 0;
    while (true) {
        System.out.print("Valor da compra: R$");
        double preco = entrada.nextDouble();
        valorTotal += preco;
        System.out.print("Nome do Produto: ");
        String nomeProduto = entrada.next();
        cliente.compra(preco, nomeProduto);

        System.out.print("Tecle qualuqer tecla para continuar ou S para Sair: ");
        String resposta = entrada.next().toUpperCase();
        if (resposta.equals("S")){
            break;
        }

    }

    System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
    System.out.println("              C O M P R A S              ");
    System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
    System.out.println("PRODUTOS                        VALOR    ");
    Collections.sort(cliente.getProduto());
    for (int i = 0; i < cliente.getProduto().size(); i++) {
        System.out.printf("%-30s %5s%n", cliente.getProduto().get(i), "R$" + cliente.getValorDoProduto().get(i));
    }
    System.out.println("");
    System.out.printf("%-30s %5s%n", "TOTAL", "R$" + valorTotal);

}

}

2 respostas

Oi Matteus, O código que você criou está funcionando corretamente e parece estar atendendo aos requisitos do problema que você está resolvendo. No entanto, há algumas melhorias que você pode fazer para seguir algumas boas práticas de programação. Aqui estão algumas sugestões:

  1. Utilize nomes de classes, métodos e variáveis em inglês: Embora não seja um requisito obrigatório, é uma boa prática usar nomes em inglês para melhorar a legibilidade e a manutenção do código.
  2. Adicione comentários: Comentários ajudam a documentar e explicar partes do código que podem não ser óbvias. Eles facilitam o entendimento do código para você e outros desenvolvedores.
  3. Separe as responsabilidades em métodos menores: O código no método main() está um pouco longo. Você pode extrair partes dele em métodos separados para melhorar a organização e a legibilidade do código.
  4. Utilize a declaração try-with-resources para fechar o Scanner: O objeto Scanner implementa a interface AutoCloseable, portanto, você pode usar a declaração try-with-resources para garantir que o Scanner seja fechado corretamente, mesmo se ocorrerem exceções. Aqui está uma versão modificada do seu código com essas melhorias:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        try (Scanner entrada = new Scanner(System.in)) {
            System.out.print("Credit Card Limit: $");
            double creditLimit = entrada.nextDouble();
            CartaoDeCredito cliente = new CartaoDeCredito(creditLimit);
            double totalValue = 0;
            while (true) {
                System.out.print("Purchase value: $");
                double price = entrada.nextDouble();
                totalValue += price;
                System.out.print("Product name: ");
                String productName = entrada.next();
                cliente.compra(price, productName);
                System.out.print("Press any key to continue or S to exit: ");
                String response = entrada.next().toUpperCase();
                if (response.equals("S")) {
                    break;
                }
            }
            System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
            System.out.println("              P U R C H A S E S            ");
            System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
            System.out.println("PRODUCTS                        VALUE    ");
            Collections.sort(cliente.getProducts());
            for (int i = 0; i < cliente.getProducts().size(); i++) {
                System.out.printf("%-30s %5s%n", cliente.getProducts().get(i),
                        "$" + cliente.getProductValues().get(i));
            }
            System.out.println("");
            System.out.printf("%-30s %5s%n", "TOTAL", "$" + totalValue);
        }
    }
}
class CartaoDeCredito {
    private double limite;
    private List<String> produtos;
    private List<Double> valores;
    public CartaoDeCredito(double limite) {
        this.limite = limite;
        this.produtos = new ArrayList<>();
        this.valores = new ArrayList<>();
    }
    public void compra(double preco, String nomeProduto) {
        if (preco <= limite) {
            produtos.add(nomeProduto);
            valores.add(preco);
            limite -= preco;
        } else {
            System.out.println("Purchase declined. Insufficient credit limit.");
        }
    }
    public List<String> getProducts() {
        return produtos;
    }
    public List<Double> getProduct
Values() {
        return valores;
    }
}

Lembre-se de que as boas práticas podem variar dependendo do contexto e das diretrizes de codificação da equipe de desenvolvimento. Portanto, é sempre uma boa ideia seguir as práticas adotadas no projeto em que você está trabalhando.

Obrigado Michel pelas dicas !