0
respostas

[Projeto] Desafio resolvido

package desafio.podecast;

import java.util.concurrent.ThreadLocalRandom;

public class Audio {
    private String titulo;
    private double duracao;
    private int totalDeReproducoes;
    private int curtidas;
    private Classificacao classificacao = new Classificacao();

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public double getDuracao() {
        return duracao;
    }

    public void setDuracao(double duracao) {
        this.duracao = duracao;
    }

    public int getTotalDeReproducoes() {
        return totalDeReproducoes;
    }

    private void setTotalDeReproducoes(int totalDeReproducoes) {
        this.totalDeReproducoes = totalDeReproducoes;
    }

    public int getCurtidas() {
        return curtidas;
    }

    private void setCurtidas(int curtidas) {
        this.curtidas = curtidas;
    }

    public void curtir(){
        this.setCurtidas(this.getCurtidas() + 1);
    }

    public void reproduzir(){
        this.setTotalDeReproducoes(this.getTotalDeReproducoes() + 1);
    }

    public void exibirClassificacao() {
        int estrelas = classificacao.getClassificacao(this.totalDeReproducoes, this.curtidas);
        String estrelasVisual = "⭐".repeat(estrelas);
        System.out.println("Curtidas: " + this.getCurtidas());
        System.out.println("Reproduções: " + this.getTotalDeReproducoes());
        System.out.println("Classificação: " + estrelasVisual);
    }

    public void gerador(Audio audio){
        System.out.println("Gerando valores aléatorios para: " + audio.getTitulo());
        ThreadLocalRandom random = ThreadLocalRandom.current();
        audio.setTotalDeReproducoes(random.nextInt(0, 101));
        audio.setCurtidas(random.nextInt(0, 101));
    }
}
package desafio.podecast;

public class Classificacao implements Classificavel {
    @Override
    public int getClassificacao(int totalDeReproducoes, int curtidas) {
        if (totalDeReproducoes <= 0 || curtidas <= 0) return 0;
        double taxa = (double) curtidas / totalDeReproducoes;
        int estrelas = (int) Math.round(taxa * 5);
        return Math.min(estrelas, 5);
    }
}
package desafio.podecast;

public interface Classificavel {
    int getClassificacao(int totalDeReproducoes, int curtdas);
}
package desafio.podecast;

public class Musica extends Audio {
    private String album;
    private String artista;
    private String genero;

    public String getAlbum() {
        return album;
    }

    public void setAlbum(String album) {
        this.album = album;
    }

    public String getArtista() {
        return artista;
    }

    public void setArtista(String artista) {
        this.artista = artista;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }
}
package desafio.podecast;

public class Podcast extends Audio{
    private String host;
    private String descricao;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
}
package desafio.podecast;

public class Main {
    public static void main(String[] args) {
        Musica musica = new Musica();
        musica.setTitulo("Blinding Lights");
        musica.setAlbum("After Hours");
        musica.setArtista("The Weeknd");
        musica.setGenero("Pop");
        musica.setDuracao(525);

        musica.gerador(musica);
        musica.exibirClassificacao();
        System.out.println();

        Podcast podcast = new Podcast();
        podcast.setTitulo("Tecnologia em Pauta");
        podcast.setHost("Carlos Silva");
        podcast.setDescricao("Discussões semanais sobre inovação, programação e mercado tech.");
        podcast.setDuracao(129999);

        podcast.gerador(podcast);
        podcast.exibirClassificacao();

    }
}

Resultado Esperado:

Gerando valores aléatorios para: Blinding Lights
Curtidas: 12
Reproduções: 77
Classificação: ⭐

Gerando valores aléatorios para: Tecnologia em Pauta
Curtidas: 83
Reproduções: 17
Classificação: ⭐⭐⭐⭐⭐

Observação: o Resultado pode variar a depender da execução devido aos numeros gerados de forma aleatoria.