Ajuda com comparable

olá pessoal, estou com um “pequeno” probleminha aqui. não estou conseguindo implementar a interface comparable.
Já li vários tópicos a respeito e depois de muitos testes, eu resolvi perguntar.
Eu tenho que implementar comparable e ordenar de acordo com a pontuaçao, porem eu tenho que fazer isso em outra classe (?) e não entendi muito bem como fazer isso. abaixo os codes, se alguem puder ajudar.

PilotoEquipe

package BrunoFagundesExerc2;

public class PilotoEquipe implements PilotoEquipeInterface, Comparable<PilotoEquipe> {

    private String nome, equipe;
    private double pontos;

    public PilotoEquipe(){}
    public PilotoEquipe(String nome, String equipe, double pontos){
        this.nome = nome;
        this.equipe = equipe;
        this.pontos = pontos;
    }

    @Override
    public String getEquipe() {
        return this.equipe;
    }

    @Override
    public String getNome() {
        return this.nome;
    }

    @Override
    public double getPontos() {
        return this.pontos;
    }

    @Override
    public void setEquipe(String equipe) {
        this.equipe = equipe;
    }

    @Override
    public void setNome(String nome) {
        this.nome = nome;
    }

    @Override
    public void setPontos(double pontos) {
        if(pontos < 0)
            throw new ValorNegativoException("A pontuação precisa ser positiva.");
        else
            this.pontos = pontos;
    }

}

class ValorNegativoException extends RuntimeException{
    public ValorNegativoException(String message){
        super(message);
    }
}

ControleFederacao

package BrunoFagundesExerc2;
import java.util.Scanner;

public class ControleFederacao {
    public static void main(String args[]){
        
        Scanner read = new Scanner (System.in);
        CorridaX1 corrida = new CorridaX1();

        for(int i=0; i<2; i++){
            PilotoEquipe p = new PilotoEquipe();
            System.out.println("digite o nome do piloto:");
            p.setNome(read.nextLine());
            System.out.println("digite a equipe do piloto:");
            p.setEquipe(read.nextLine());
            System.out.println("digite a pontuação");

            try{
                p.setPontos(read.nextDouble());
            }catch(ValorNegativoException e){
                System.out.println("ERRO " +e);
            }

            read.nextLine();
            corrida.adicionaPiloto(p);
        }

        corrida.Ordena();
        corrida.Print();
    }
}

e PilotoCorrida

package BrunoFagundesExerc2;

public class PilotoCorrida implements Comparable<PilotoEquipe> {

    @Override
    public int compareTo(PilotoEquipe p) {
        if(this.pontos < p.pontos)
            return -1;
        if(this.pontos > p.pontos)
            return 1;
        else
            return 0;
    }

Corrida

package BrunoFagundesExerc2;
import java.util.Arrays;

public class CorridaX1 {

    PilotoEquipeInterface pilotos[] = new PilotoEquipeInterface[20];
    private int last = 0;

    public void adicionaPiloto(PilotoEquipeInterface p){
        pilotos[last] = p;
        last++;
    }

    public void removePiloto(int x){
        pilotos[x] = null;
        for(int i = x; i<last-1; i++)
            pilotos[i] = pilotos[i+1];
        last--;
    }

    public void Print(){
        for(int i=0; i<last; i++)
            System.out.print("\nNome: " +pilotos[i].getNome()+ ". Equipe: " +pilotos[i].getEquipe()+ ". Pontos: " +pilotos[i].getPontos());
    }

    public void Ordena(){
        Arrays.sort(pilotos);
    }

}

Obg.

Cara não li todo seu codigo…
mais acho q vc quer fazer a ordenação no seu metodo ordena…certo??

Entaum…

Vc esta usando:

 Arrays.sort(pilotos);

Se nao me engano vc tem q usar:

Arrays.sort(pilotos, pilotoCorrida);

pessoal, desculpem, o problema que ocorria é que como eu estav testando estava fazendo o for com apenas 2 repetições, pra não ter que ficar digitando 20 pilotos em cada teste, e isso estava causando NullPointerException quando chamava o Arrays.sort();

Agora está funcionando, embora eu ainda não tenha entendido a sintaxe do comparable.

[quote=brunofs8]pessoal, desculpem, o problema que ocorria é que como eu estav testando estava fazendo o for com apenas 2 repetições, pra não ter que ficar digitando 20 pilotos em cada teste, e isso estava causando NullPointerException quando chamava o Arrays.sort();

Agora está funcionando, embora eu ainda não tenha entendido a sintaxe do comparable.

[/quote]

faz pouco tempo q ajudei um cara com isso…

segue o post dele:

dei um exemplo funcional no final do topico…

enjoy =]

brunosf8

O que não entendeu da sintaxe do comparable?

public class PilotoCorrida implements Comparable<PilotoEquipe> { @Override public int compareTo(PilotoEquipe p) { if(this.pontos < p.pontos) return -1; if(this.pontos > p.pontos) return 1; else return 0; } }Uma forma de pensar é assim, quando você está comparando dois objetos, o anterior (em uma ordem especifica) você atribui -1, se eles forem iguais atribui 0, e se ele for posterior ao objeto comparado você poe 1

Exemplo

Comparar A com B, A é antes de B, logo ele é -1
Comparar B com A, B é depois de A, logo ele é 1
Comparar A com A, eles são iguais, então é 0

Não sei se foi isto que não entendeu… !!! caso tenha sido outra coisa, poste novamente.

Att

Fala brow,

Na classe que voce ta precisando ordenar, vc implementa a interface Comparable, e acho
que teria tambem que sobrescrever o metodo compareTo()

Abraco!

Bom dia. obg a todos os colegas pela ajuda.

Implementa Comparable e subrescreve compareTo(). Simples assim :slight_smile: