Para este desafio desenvolvi o código abaixo, porém não consegui realizar a listagem por valores ao final da execução, os valores não saíram corretos em relação aos produtos.
import java.util.*;
import static java.lang.System.exit;
public class Compra implements Comparable<Compra>{
private String nomeProduto;
private double valorProduto;
private double limiteCartao = 1000.00;
List<String> nome = new ArrayList<>();
List<Double> valor = new ArrayList<>();
Scanner sc = new Scanner(System.in);
//Construtor
public Compra(String nomeProduto, double valorProduto) {
this.nomeProduto = nomeProduto;
this.valorProduto = valorProduto;
}
//Sobrecarga método toString
@Override
public String toString() {
return "Produto: " + this.getNomeProduto() + "( R$ " + this.getValorProduto() + ")";
}
//Método entrada de dados
public void entrarDados() {
System.out.println("===== SISTEMA DE COMPRAS =====");
System.out.println("===== VOCÊ POSSUI SALDO DE R$ 1.000,00 =====");
System.out.println("============================================");
System.out.println("Bem vindo(a). Selecione a opção abaixo:");
int selecao = 1;
do {
System.out.println("\n1 - REALIZAR COMPRAS");
System.out.println("2 - SAIR");
int opcao = sc.nextInt();
switch (opcao) {
case 1:
System.out.println("Insira o produto: ");
this.setNomeProduto(sc.next());
nome.add(this.getNomeProduto());
System.out.println("Insira o valor do produto: ");
this.setValorProduto(sc.nextDouble());
valor.add(this.getValorProduto());
System.out.println("===== COMPRAS REALIZADAS =====");
for (int i = 0; i < nome.size(); i++) {
System.out.println(i + " Produto: " + nome.get(i).toString() + " - " +
"Valor: " + valor.get(i));
}
retirarValor();
break;
case 2:
System.out.println("Saindo do programa...");
exit(0);
}
} while (selecao == 1);
}
//Método controla fluxo de saída valor limite
public void retirarValor() {
double novoValorCredito = 0;
double acumuladorValorCompra = 0;
for (int i = 0; i < valor.size(); i++) {
acumuladorValorCompra = acumuladorValorCompra + valor.get(i);
novoValorCredito = limiteCartao - acumuladorValorCompra;
}
System.out.println("==============================================");
System.out.println("Valor total gasto: R$ " + acumuladorValorCompra);
System.out.println("==============================================");
if (acumuladorValorCompra >= 1000 || novoValorCredito <= 0 ) {
System.out.println("Limite de R$ 1000,00 ja utilizado. Não pode fazer mais compras!");
System.out.println("\n========================================");
Collections.sort(nome);
Collections.sort(valor);
valor.sort(Comparator.comparing(Compra -> getValorProduto()));
System.out.println("LISTANDO AS COMPRAS POR ORDEM ALFABÉTICA: ");
System.out.println("==========================================");
for (int i = 0; i < nome.size(); i++) {
System.out.println(nome.get(i).toString() + " - " + valor.get(i).toString());
}
exit(0);
} else {
System.out.println("Você ainda possui créditos restante: R$ " + novoValorCredito);
System.out.println("================================================");
}
}
//getters e setters
public String getNomeProduto() {
return nomeProduto;
}
public void setNomeProduto(String nomeProduto) {
this.nomeProduto = nomeProduto;
}
public double getValorProduto() {
return valorProduto;
}
public void setValorProduto(double valorProduto) {
this.valorProduto = valorProduto;
}
public double getLimiteCartao() {
return limiteCartao;
}
public void setLimiteCartao(double limiteCartao) {
this.limiteCartao = limiteCartao;
}
//SobreCarga método compareTo
@Override
public int compareTo(Compra outroProduto) {
return Double.valueOf(this.valorProduto).compareTo(Double.valueOf(outroProduto.valorProduto));
}
}
public class Principal {
public static void main(String[] args) {
Compra compra = new Compra("",0.0);
compra.entrarDados();
}
}