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());
}
}
}