Untitled

 avatar
unknown
plain_text
9 months ago
3.6 kB
4
Indexable
class Song {
    private String title;
    private String artist;
    private int length; // length of the song in seconds

    public Song(String title, String artist, int minutes, int seconds) {
        this.title = title;
        this.artist = artist;
        this.length = minutes * 60 + seconds;
    }

    public String getTitle() {
        return title;
    }

    public String getArtist() {
        return artist;
    }

    public int getLength() {
        return length;
    }

    public void display() {
        int minutes = length / 60;
        int sec = length % 60;
        System.out.printf("%s (%02d:%02d)\n", artist, minutes, sec);
    }
}

class Album {
    private String title;
    private String artist;
    private Song[] tracklist;

    public Album(String title, String artist, Song[] tracklist) {
        this.title = title;
        this.artist = artist;
        this.tracklist = new Song[tracklist.length];
        System.arraycopy(tracklist, 0, this.tracklist, 0, tracklist.length);
    }

    public String getTitle() {
        return title;
    }

    public String getArtist() {
        return artist;
    }

    public int getNumTracks() {
        return tracklist.length;
    }

    public Song getTrack(int trackNumber) {
        if (trackNumber > 0 && trackNumber <= tracklist.length) {
            return tracklist[trackNumber - 1];
        }
        return null;
    }

    public boolean comesBefore(Album otherAlbum) {
        int artistComparison = artist.compareToIgnoreCase(otherAlbum.getArtist());
        if (artistComparison < 0 || (artistComparison == 0 && title.compareToIgnoreCase(otherAlbum.getTitle()) < 0)) {
            return true;
        }
        return false;
    }

    public void displayAlbum() {
        System.out.printf("- %s (%d track%s)\n", artist, tracklist.length, tracklist.length == 1 ? "" : "s");
    }

    public void displayTracklist() {
        for (int i = 0; i < tracklist.length; i++) {
            System.out.printf("%2d. %s\n", i + 1, tracklist[i].getTitle());
        }
    }
}

class AlbumCollection {
    public static final int MAX_ALBUMS = 100;

    private int numAlbums;
    private Album[] albums;

    public AlbumCollection() {
        numAlbums = 0;
        albums = new Album[MAX_ALBUMS];
    }

    public int getNumAlbums() {
        return numAlbums;
    }

    public boolean addAlbum(Album album) {
        if (numAlbums < MAX_ALBUMS) {
            albums[numAlbums] = album;
            numAlbums++;
            return true;
        }
        return false;
    }

    public Album findAlbum(String title, String artist) {
        for (int i = 0; i < numAlbums; i++) {
            if (albums[i].getArtist().equalsIgnoreCase(artist) && albums[i].getTitle().equalsIgnoreCase(title)) {
                return albums[i];
            }
        }
        return null;
    }

    public void sortAlbums() {
        for (int i = 0; i < numAlbums - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < numAlbums; j++) {
                if (albums[j].comesBefore(albums[minIndex])) {
                    minIndex = j;
                }
            }
            if (minIndex != i) {
                Album temp = albums[i];
                albums[i] = albums[minIndex];
                albums[minIndex] = temp;
            }
        }
    }

    public void displayAlbums() {
        for (int i = 0; i < numAlbums; i++) {
            albums[i].displayAlbum();
        }
    }

    public void displaySongs() {
        for (int i = 0; i < numAlbums; i++) {
            albums[i].displayTracklist();
        }
    }
}
Editor is loading...
Leave a Comment