Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

metod compareTo() sescion 04 ordenamiento de datos

buena tarde, tengo un error en el ordenamiento de Cuenta x saldo, descendente (de mayor a menor) código del main.java

package com.alura.screenmatch.compareto;

import java.util.ArrayList;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        ArrayList<Cuenta> cuentas= new ArrayList<>();
        cuentas.add(new Cuenta("Ana",125000));
        cuentas.add(new Cuenta ("Hector",10000));
        cuentas.add(new Cuenta("Beatriz", 385000));
        cuentas.add(new Cuenta("Luis",185000));
        cuentas.add(new Cuenta("Rene",400000));
        cuentas.sort(Comparator.comparing(Cuenta::getSaldo));
        System.out.println("lista cuentas descendente por Saldo ");
        System.out.println(cuentas.toString());
    }
}

y tengo el codigo de la clase Cuenta()

package com.alura.screenmatch.compareto;

public class Cuenta implements Comparable<Cuenta> {
    private String titular;
    private double saldo;

    public Cuenta(String titular, double saldo) {
        this.titular = titular;
        this.saldo = saldo;
    }

    //getters y setters omitidos
    public String getTitular() {
        return titular;
    }
    public void setTitular(String titular) {
        this.titular = titular;
    }
    public double getSaldo() {
        return saldo;
    }
    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    @Override
    public String toString() {
        return "Cuenta "+getTitular()+" ,Saldo "+getSaldo()+"\n";
    }

    @Override
    public int compareTo(Cuenta otraCta) {
        return Double.compare(this.getSaldo(), otraCta.getSaldo());
     }
}

No funciona ordenamiento descendente, como dice en una de las preguntas del cuestionario de ese modulo. Dice que es la opción 1, ya probé con las otras opciones y tampoco Tengo mal posicionado el compareTo(), o estoy utilizandolo mal. Esta instrucción. return Double.compare(this.getSaldo(), otraCta.getSaldo()); la sugiere el IDE.

lista cuentas descendente por Saldo 
[Cuenta Hector ,Saldo 10000.0
, Cuenta Ana ,Saldo 125000.0
, Cuenta Luis ,Saldo 185000.0
, Cuenta Beatriz ,Saldo 385000.0
, Cuenta Rene ,Saldo 400000.0
]

como se dan cuenta, sale ascendente.

2 respuestas

Hola Rene, ¡buena tarde!

Entiendo que estás tratando de ordenar una lista de objetos Cuenta por saldo en orden descendente. El problema que estás enfrentando es que el método compareTo que has implementado ordena de manera ascendente. Para lograr el orden descendente, necesitas ajustar la implementación del método compareTo.

Actualmente, tu implementación de compareTo es esta:

@Override
public int compareTo(Cuenta otraCta) {
    return Double.compare(this.getSaldo(), otraCta.getSaldo());
}

Para ordenar de manera descendente, puedes invertir el orden de los argumentos en Double.compare o usar la implementación correcta de acuerdo con el cuestionario que mencionaste. Aquí está la opción correcta para orden descendente:

@Override
public int compareTo(Cuenta otra) {
    if (this.saldo < otra.saldo) {
        return 1;
    } else if (this.saldo > otra.saldo) {
        return -1;
    } else {
        return 0;
    }
}

Además, en tu método main, cuando usas Comparator.comparing, puedes invertir el orden usando Comparator.comparing(Cuenta::getSaldo).reversed() para lograr el mismo efecto:

cuentas.sort(Comparator.comparing(Cuenta::getSaldo).reversed());

Ambas soluciones deberían funcionar para ordenar las cuentas de manera descendente por saldo. Espero que esto te ayude a resolver el problema.

¡Espero haber ayudado y buenos estudios!

buena tarde, gracias por la explicación, fue clara.