Boa tarde, tudo bem?
Queria deixar como um possível exemplo para esse projeto final o uso do StringBuilder para realizar a criação do menu.
package br.com.compras.model;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Cartao {
private double limiteCartao;
private List<Item> listaDeCompra;
public Cartao(double limiteCartao) {
this.limiteCartao = limiteCartao;
this.listaDeCompra = new ArrayList<>();
}
public boolean consultaLimite(double valor) {
return this.limiteCartao > valor;
}
public void fazCompra(double valor, Item item) {
if(valor < limiteCartao) {
this.limiteCartao -= valor;
this.listaDeCompra.add(item);
}
}
public double getLimiteCartao() {
return limiteCartao;
}
public void listaItens() {
StringBuilder sb = new StringBuilder();
listaDeCompra.sort(Comparator.comparing(Item::getValor));
for (Item item : listaDeCompra) {
sb.append(item.getDescricao())
.append(" - R$ ")
.append(item.getValor())
.append("\n");
}
String mensagem = """
*******************************************
COMPRAS REALIZADAS:
%s
*******************************************
""".formatted(sb.toString());
System.out.println(mensagem);
}
}
package br.com.compras.model;
public class Item {
private double valor;
private String descricao;
public Item(double valor, String descricao) {
this.valor = valor;
this.descricao = descricao;
}
public double getValor() {
return this.valor;
}
public String getDescricao() {
return this.descricao;
}
public void setValor(double valor) {
this.valor = valor;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
}
import java.util.Locale;
import java.util.Scanner;
import br.com.compras.model.Cartao;
import br.com.compras.model.Item;
public class App {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
System.out.print("Digite o limite do cartão: ");
double limiteCartao = scanner.nextDouble();
Cartao cartao = new Cartao(limiteCartao);
boolean escolha = false;
while (!escolha) {
scanner.nextLine();
System.out.print("Digite a descrição da compra: ");
String descricaoCompra = scanner.nextLine();
System.out.print("Digite o valor da compra: ");
double valorCompra = scanner.nextDouble();
Item item = new Item(valorCompra, descricaoCompra);
if(!cartao.consultaLimite(valorCompra)) {
System.out.println("Saldo Insuficiente!");
cartao.listaItens();
System.out.println("Saldo do cartão: " + cartao.getLimiteCartao());
break;
} else {
cartao.fazCompra(valorCompra, item);
}
System.out.print("Digite 0 para sair ou 1 para continuar: ");
escolha = scanner.nextInt() == 0;
if(escolha) {
cartao.listaItens();
System.out.println("Saldo do cartão: " + cartao.getLimiteCartao());
}
}
scanner.close();
}
}