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.