Quando terminei de realizar o desafio, fui ver a correção e percebi alguns pontos diferentes do meu projeto. São pontos que eu devo me atentar para seguir as boas práticas ou é só mais uma maneira de concluir o desafio?
Alias, a classe ContaBancaria e Produto foram criadas com o mesmo proposito das classes CartaoDeCredito e Compra
package desafio.Compras;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class PrincipalCompras {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Digite um limite para suas Compras: R$");
double limite = sc.nextDouble();
sc.nextLine(); // Limpa o Buffer
ContaBancaria contaBancaria = new ContaBancaria(limite);
List<Produto> listaProdutos = new ArrayList<>();
while (true) {
System.out.println("-".repeat(30));
System.out.println("Saldo Disponível: R$"+contaBancaria.getSaldo());
System.out.print("Digite a descrição do produto: ");
String nome = sc.nextLine(); // Limpa o Buffer
System.out.println("Digite o preço do produto: ");
double preco = Double.parseDouble(sc.nextLine());
boolean sucessoNaCompra = contaBancaria.comprarProduto(preco);
if (sucessoNaCompra){
listaProdutos.add(new Produto(nome,preco));
}
System.out.println("Gostaria de continuar? [1]-SIM | [0]-NÃO");
if (sc.nextInt()==0) break;
sc.nextLine(); // limpa o buffer
}
listaProdutos.sort(Comparator.comparing(Produto::getPreco));
sc.close();
contaBancaria.exibirFatura(listaProdutos);
}
}
package desafio.Compras;
public class Produto {
private String nome;
private double preco;
public Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
@Override
public String toString() {
return "Produto: "+this.nome+"; Preço: R$"+ this.preco ;
}
}
package desafio.Compras;
import java.util.List;
public class ContaBancaria {
private double limite;
private double saldo;
public ContaBancaria(double limite) {
this.limite = limite;
this.saldo = limite;
}
public double getLimite() {
return limite;
}
public double getSaldo() {
return saldo;
}
public boolean comprarProduto(double valorGasto){
if (!(valorGasto>0)){
System.out.println("Valor Inválido");
return false;
}
if (saldo - valorGasto >=0 ) {
saldo = saldo - valorGasto;
return true;
}
System.out.println("Saldo Insuficiente");
return false;
}
public void exibirFatura(List<Produto> lista){
System.out.println("*".repeat(30));
System.out.println("\tFATURA DO CARTÃO");
System.out.println();
lista.forEach(System.out::println);
System.out.println();
System.out.println("Saldo Restante R$"+ saldo);
System.out.println("*".repeat(30));
}
}