Interface
package com.vn.challenge;
public interface Playable {
void play();
void like();
double getRating();
}
Classe mãe
package com.vn.challenge;
public class Audio implements Playable {
private String title;
private int duration;
private int totalPlays;
private int likes;
private double rating;
public Audio(String title, int duration) {
this.title = title;
this.duration = duration;
this.totalPlays = 0;
this.likes = 0;
}
@Override
public void play() {
totalPlays++;
calculateRating();
}
@Override
public void like() {
likes++;
calculateRating();
}
@Override
public double getRating() {
return rating;
}
private void calculateRating() {
if (totalPlays > 0) {
rating = (double) likes / totalPlays * 5;
if (rating > 5.0) rating = 5.0;
}
}
public String getTitle() { return title; }
public int getDuration() { return duration; }
public int getTotalPlays() { return totalPlays; }
public int getLikes() { return likes; }
}
Classes filhas
package com.vn.challenge;
public class Podcast extends Audio {
private String host;
private String description;
private int episodeNumber;
public Podcast(String title, int duration, String host, String description, int episodeNumber) {
super(title, duration);
this.host = host;
this.description = description;
this.episodeNumber = episodeNumber;
}
@Override
public String toString(){
return "Podcast: " + getTitle() + "| Host: " + host + "| Episode: " + episodeNumber;
}
public String getHost() { return host; }
public int getEpisodeNumber() { return episodeNumber; }
public String getDescription() { return description; }
}
package com.vn.challenge;
public class Music extends Audio {
private String artist;
private String album;
private String genre;
public Music(String title, int duration, String artist, String album, String genre) {
super(title, duration);
this.artist = artist;
this.album = album;
this.genre = genre;
}
@Override
public String toString(){
return "Music: " + getTitle() + "| Artist: " + artist + "| Album: " + album + "| Genre: " + genre;
}
public String getArtist() { return artist; }
public String getAlbum() { return album; }
public String getGenre() { return genre; }
}
Main
package com.vn.challenge;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Music m1 = new Music("Wonderwall", 258, "Oasis", "(What's the Story) Morning Glory?", "Britpop");
Music m2 = new Music("Boulevard of Broken Dreams", 261, "Green Day", "American Idiot", "Punk Rock");
Podcast p1 = new Podcast("The Alibi", 3120, "Sarah Koenig", "Investigative journalism podcast exploring the 1999 murder case of Hae Min Lee", 1);
Podcast p2 = new Podcast("How to Improve Your Focus", 7200, "Andrew Huberman", "Neuroscientist explains science-based tools to improve focus and concentration", 2);
List<Playable> audios = new ArrayList<>();
audios.add(m1);
audios.add(m2);
audios.add(p1);
audios.add(p2);
for (int i = 0; i < 4; i++) {m1.play();}
for (int i = 0; i < 3; i++) {m1.like();}
for (int i = 0; i < 5; i++) {m2.play();}
for (int i = 0; i < 2; i++) {m2.like();}
for (int i = 0; i < 3; i++) {p1.play();}
for (int i = 0; i < 3; i++) {p1.like();}
for (int i = 0; i < 4; i++) {p2.play();}
for (int i = 0; i < 1; i++) {p2.like();}
List<Playable> favorites = new ArrayList<>();
System.out.println("=== All Audios ===");
for (Playable audio : audios) {
if (audio.getRating() >= 3.0) favorites.add(audio);
System.out.println(audio);
System.out.println("Rating: " + audio.getRating() + " ⭐");
System.out.println("-------------------");
}
System.out.println("\n=== Favorites (rating >= 3.0) ===");
for (Playable audio : favorites) {
System.out.println(audio);
System.out.println("Rating: " + audio.getRating() + " ⭐");
System.out.println("-------------------");
}
}
}