1
resposta

[Bug] [Bug] código não retorna lista ordenada de titulos

package br.com.screenmatch.Principal;

import br.com.screenmatch.modelos.Serie;
import br.com.screenmatch.modelos.Titulo;
import br.com.screenmatch.modelos.Filme;

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

public class PrincipalLista {
    public static void main(String[] args) {
        Filme meuFilme = new Filme(" Poderoso chefão", 1970);
        meuFilme.avalia(9);
        Filme outroFilme = new Filme("Amor as cegas", 1990);
        outroFilme.avalia(8);
        Filme terceiroFilme = new Filme("Dogville", 1995);
        terceiroFilme.avalia(7);
        Serie lost = new Serie("Lost", 2024);
        ArrayList<Titulo> lista = new ArrayList<>();
        lista.add(meuFilme);
        lista.add(outroFilme);
        lista.add(terceiroFilme);
        lista.add(lost);
        for(Titulo item: lista){
            System.out.println(item.getNome());
            if (item instanceof Filme filme && filme.getClassificacao() > 2){
                System.out.println("Classificaçao: " + filme.getClassificacao());
            }
        }
        ArrayList<String> buscarPorArtista = new ArrayList<>();
        buscarPorArtista.add("Adam Sandler");
        buscarPorArtista.add("Paulo Oliveira");
        buscarPorArtista.add("Jaccqueline Horana");
        //System.out.println(buscarPorArtista);
        Collections.sort(buscarPorArtista);
        System.out.println("Despois da ordenação");
        System.out.println(buscarPorArtista);
        System.out.println("Lista de titulos ordenados: ");
        Collections.sort(lista);
        System.out.println(lista);
    }

}
package br.com.screenmatch.modelos;


import org.jetbrains.annotations.NotNull;

public class Titulo implements Comparable<Titulo> {
    private String nome;
    private int anoDeLancamento;
    private boolean incluidoNoPlano;
    private double somaDasAvaliacoes;
    private int totalDeAvaliacao;
    private int DuracaoEmMinutos;


    public Titulo(String nome, int ano){
        this.nome = nome;
        this.anoDeLancamento = ano;
    }

    public String getNome() {
        return nome;
    }

    public int getAnoDeLancamento() {
        return anoDeLancamento;
    }

    public int getTotalDeAvaliacao(){
        return totalDeAvaliacao;

    }

    public boolean isIncluidoNoPlano() {
        return incluidoNoPlano;
    }

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

    public void setDuracaoEmMinutos(int duracaoEmMinutos) {
        DuracaoEmMinutos = duracaoEmMinutos;
    }

    public void setIncluidoNoPlano(boolean incluidoNoPlano) {
        this.incluidoNoPlano = incluidoNoPlano;
    }

    public int getDuracaoEmMinutos() {
        return DuracaoEmMinutos;
    }

    public void setAnoDeLancamento(int anoDeLancamento) {
        this.anoDeLancamento = anoDeLancamento;
    }

    public void exibeFichaTecnica(){
        System.out.println("Nome: " + nome);
        System.out.println("Ano de lançamento: " + anoDeLancamento);
        System.out.println("Avaliação: " + somaDasAvaliacoes);
        System.out.println("Incluido no plano: " + incluidoNoPlano);
        System.out.println("Duração em minutos: "+ DuracaoEmMinutos);
        System.out.println("Total de avaliação: " + totalDeAvaliacao);
    }
    public void avalia(double nota){
        somaDasAvaliacoes = somaDasAvaliacoes  +  nota;
        totalDeAvaliacao = totalDeAvaliacao + 1;
    }

    public double pegaMedia(){
        return somaDasAvaliacoes/totalDeAvaliacao;
    }
    @Override
    public int compareTo(@NotNull Titulo titulo) {
        return this.getNome().compareTo(titulo.getNome());
    }

}    

Não esta ordenando o lista de titulo

1 resposta

Olá Maria! Tudo bem?

Pelo código que você compartilhou, a classe Titulo já implementa a interface Comparable<Titulo>, e o método compareTo() está comparando os nomes dos títulos, o que deveria permitir a ordenação alfabética.

No entanto, a impressão da lista após a ordenação está mostrando os objetos em vez de seus nomes. Isso acontece porque o System.out.println(lista); está imprimindo a representação padrão dos objetos Java, o nome da classe seguido de um código hash.

Para resolver isso, você pode sobrescrever o método toString() na classe Titulo para retornar o nome do título. Aqui está como você pode fazer isso:

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

Adicione esse método na classe Titulo. Assim, quando você imprimir a lista, verá os nomes dos títulos em vez da representação padrão dos objetos.

Após fazer essa alteração, ao executar o System.out.println(lista);, a saída deve mostrar os títulos em ordem alfabética.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.