Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] "sort" não funciona.

Estou fazendo os exercícios dessa aula e o meu método sort não funciona de jeito nenhum! As aulas não se organizam em ordem alfabética nem nada, já até tentei copiar o código do professor e colocar lá, mas nada funcionou. Aqui vai o código de algumas classes:

Classe TestaCurso2

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class TestaCurso2 {

    public static void main(String[] args) {
        Curso cursoJava = new Curso("Curso Introdução Java", "Jorge Alcântara");

        cursoJava.adiciona(new Aulas("Introdução", 4));
        cursoJava.adiciona(new Aulas("Principais Conceitos", 9));
        cursoJava.adiciona(new Aulas("Java na prática", 16));

        System.out.println(cursoJava.getLista());

        List<Aulas> aulas = new ArrayList<>(cursoJava.getLista());

        Collections.sort(aulas);
        System.out.println(aulas);

    }

}

Classe Curso

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Curso {

    private String instrutor;
    private String nome;
    private List<Aulas> lista = new ArrayList<>();

    public Curso(String instrutor, String nome) {
        this.instrutor = instrutor;
        this.nome = nome;
    }

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

    public String getInstrutor() {
        return instrutor;
    }

    public void adiciona(Aulas aula) {
        this.lista.add(aula);
    }

    public List<Aulas> getLista() {
        return Collections.unmodifiableList(lista);
    }


}

Classe Aulas:

public class Aulas implements Comparable<Aulas> {
    private String nome;
    private int duracao;

    public Aulas(String nome, int duracao) {
        this.duracao = duracao;
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }

    public int getDuracao() {
        return duracao;
    }


    @Override
    public String toString() {
        return "Aula: " + this.nome + ", " + this.duracao + " minutos.";
    }

    @Override
    public int compareTo(Aulas outraAula) {
        return this.nome.compareTo(getNome());
    }
}
4 respostas

Olá, Douglas! Tudo bem?

Pelo código que você postou, parece que está tudo certo. O método sort() da classe Collections deve ordenar a lista de aulas em ordem alfabética, já que a classe Aulas implementa a interface Comparable.

Porém, notei que você está imprimindo a lista de aulas duas vezes: uma vez antes de ordená-la e outra vez depois de ordená-la. Talvez isso esteja gerando confusão na hora de verificar se a lista está ordenada ou não.

Tente remover a primeira impressão da lista e veja se a ordenação está funcionando corretamente. Caso ainda esteja com problemas, verifique se não há nenhum erro de digitação ou de lógica no seu código.

Espero ter ajudado e bons estudos!

Oi Arthur, a lista ainda imprime o mesmo resultado antes e depois. Segue aqui um print:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Olá, Douglas!

Acabei deixando escapar, peço desculpas!

No método compareTo, você está comparando o nome da aula com o nome da própria aula, mas o correto seria comparar o nome da aula atual com o nome da outra aula que está sendo comparada.

Para corrigir, basta alterar a linha de código abaixo:

return this.nome.compareTo(getNome());

Para:

return this.nome.compareTo(outraAula.getNome());

Espero ter ajudado e bons estudos!

Obrigado, Arthur!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software