utilizei um método alternativo para ordenação:
listaDeCompras.sort(Comparator.comparing(Compra::getValor));
e também para o laço, não utilizei o for each, mas o for i:
for(int i = 0; i < listaDeCompras.size(); i++){ System.out.println(listaDeCompras.get(i).getDescricao() + " - " + listaDeCompras.get(i).getValor()); }
segue o código:
Classe Compra: public class Compra implements Comparable{ private String descricao; private double valor;
public Compra(String descricao, double valor) {
this.descricao = descricao;
this.valor = valor;
}
public String getDescricao() {
return descricao;
}
public double getValor() {
return valor;
}
@Override
public String toString() {
return "Compra: " +
"descricao='" + descricao +
", valor = " + valor +
'}';
}
//método para implementar a ordenação
@Override
public int compareTo(Compra outraCompra) {
return this.getDescricao().compareTo(outraCompra.getDescricao());
}
}
Classe CartaoDeCredito: import java.util.ArrayList; import java.util.List;
public class CartaDeCredito { private double limite; private double saldo; private List compras;
public CartaDeCredito(double limite) {
this.limite = limite;
this.saldo = limite;
this.compras = new ArrayList<>();
}
public boolean lancaCompra (Compra compra){
if (this.saldo > compra.getValor()){
this.saldo -= compra.getValor();
this.compras.add(compra);
return true;
}
return false;
}
public double getLimite() {
return limite;
}
public double getSaldo() {
return saldo;
}
public List<Compra> getCompras() {
return compras;
}
}
Classe Principal:
import java.util.ArrayList;
import java.util.Collections; import java.util.Comparator; import java.util.Scanner;
public class Principal { public static void main(String[] args) { //classe padrão para entrada de dados Scanner leitura = new Scanner(System.in);
System.out.println("Digite o limite do cartão de crédito: ");
double limite = leitura.nextDouble();
//instaciar a classe CartaoDeCredito
CartaDeCredito cartao = new CartaDeCredito(limite);
int sair = 1;
ArrayList<Compra> listaDeCompras = new ArrayList<>();
while (sair != 0) {
System.out.println("Digite a descrição da compra: ");
String descricao = leitura.next();
System.out.println("Digite o valor da compra: ");
double valor = leitura.nextDouble();
Compra compra = new Compra(descricao, valor);
boolean compraRealizada = cartao.lancaCompra(compra);
if (compraRealizada) {
System.out.println("Compra realizada!");
System.out.println("Digite 0 para sair ou 1 para continuar");
sair = leitura.nextInt();
listaDeCompras.add(compra);
} else {
System.out.println("Saldo insulficiente !");
sair = 0;
}
}
//ordenação pelo valor
listaDeCompras.sort(Comparator.comparing(Compra::getValor));
System.out.println("********************");
System.out.println("COMPRAS REALIZADAS");
for(int i = 0; i < listaDeCompras.size(); i++){
System.out.println(listaDeCompras.get(i).getDescricao() + " - " + listaDeCompras.get(i).getValor());
}
System.out.println("********************");
}
}