0
respostas

[Projeto] Projeto final - Audio

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("-------------------");
        }
    }
}