1
resposta

[Projeto] método alternativo para ordenação por valor

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

}

1 resposta

Muito bom gerson, ficou massa