Tässä harjoituksessa hyödynnetään edellisessä harjoituksessa kirjoittamiasi Artist- ja Song-luokkia. Tehtäväsi on hyödyntää edellä mainittuja luokkia ja kirjoittaa uusi Playlist-niminen luokka. Kirjoita Playlist-luokka omaan tiedostoonsa. Artist- ja Song-luokkia sinun ei tarvitse palauttaa, ne löytyvät Viopesta valmiina. Playlist-luokassa tulee olla seuraavat instanssimuuttujat, konstruktorit ja metodit: - yksityiset instanssimuuttujat: - ArrayList songs - julkiset konstruktorit: - Playlist() luo soittolistalle uusi songs-lista täällä - julkiset metodit: - void addSong(Song song) lisää annetun kappaleen songs-listalle viimeiseksi - Song getSong(int index) palauttaa listalta kohdassa index olevan kappaleen, tai null jos kohdassa ei ole kappaletta. Vertaa tässä metodissa annettua indeksiä songs-listan pituuteen ennen kuin kutsut listan get-metodia! - int getTotalLength() laskee soittolistan kappaleiden yhteiskeston sekunteina ja palauttaa tuloksen - String toString() Playlist-luokan toString-metodin tulee palauttaa merkkijono, jossa kutakin kappaletta kohden on yksi rivi. Rivin tulee alkaa numerolla ja kaksoispisteellä, ja niiden jälkeen tulee olla kappaleen toString-metodin palauttama merkkijonoesitys. Huomaa, että toString ei saa tulostaa mitään, vaan sen tulee palauttaa muodostettu merkkijono. Esimerkiksi: ``` 1: Never Gonna Give You Up by Rick Astley 2: Hooked on a Feeling by David Hasselhoff ``` Tässä harjoituksessa sinun ei tarvitse palauttaa omaa pääohjelmaa ja tehtävänannossa vaaditut metodit eivät saa tulostaa mitään. Oman pääohjelman kirjoittaminen luokan testaamiseksi on kuitenkin erittäin suositeltavaa. Tässä tehtävässä esiintyvän kappaleiden pituuksien yhteenlaskun hahmottamiseksi on tehty videotallenne, jossa ratkaistaan vastaavaa ongelmaa pelaajien pituuksien yhteenlaskun muodossa. Vastaavasti toString-metodin toteutuksessa voit hyödyntää videotallennetta jossa käydään läpi listalla olevia merkkijonoja, jotka yhdistetään toistorakenteessa yhdeksi. ``` Example output: = Suoritetaan ohjelma = Playlist playlist = new Playlist(); Artist artist = new Artist("Rick Astley", 1966); Song song = new Song(); song.setTitle("Never Gonna Give You Up"); song.setYear(1987); song.setLength(215); song.setArtist(artist); playlist.addSong(song); System.out.println(playlist); System.out.println(playlist.getTotalLength()); Artist artist2 = new Artist("David Hasselhoff", 1952); Song song2 = new Song(); song2.setTitle("Hooked on a Feeling"); song2.setYear(1997); song2.setLength(211); song2.setArtist(artist2); playlist.addSong(song2); System.out.println(playlist); System.out.println(playlist.getTotalLength()); = Ohjelman tuloste = 1: Never Gonna Give You Up by Rick Astley 215 1: Never Gonna Give You Up by Rick Astley 2: Hooked on a Feeling by David Hasselhoff 426 ``` ------------------ ``` import java.util.ArrayList; public class Playlist { private ArrayList songs = new ArrayList(); public Playlist() { // luo soittolistalle uusi songs-lista täällä this.songs = songs; } public void addSong(Song song) { // lisää annetun kappaleen songs-listalle viimeiseksi this.songs.add(song); } public Song getSong(int index) { // palauttaa listalta kohdassa index olevan kappaleen, tai null jos kohdassa ei ole kappaletta. // Vertaa tässä metodissa annettua indeksiä songs-listan pituuteen ennen kuin kutsut listan get-metodia! if (index < this.songs.size() - 1) { return this.songs.get(index); } else { return null; } } public int getTotalLength() { // laskee soittolistan kappaleiden yhteiskeston sekunteina ja palauttaa tuloksen int l = 0; for (int i = 0; i < this.songs.size(); i++) { l += this.songs.get(i).getLength(); } return l; } @Override public String toString() { // Playlist-luokan toString-metodin tulee palauttaa merkkijono, jossa kutakin kappaletta kohden on yksi rivi. // Rivin tulee alkaa numerolla ja kaksoispisteellä, ja niiden jälkeen tulee olla kappaleen toString-metodin // palauttama merkkijonoesitys. Huomaa, että toString ei saa tulostaa mitään, vaan sen tulee palauttaa // muodostettu merkkijono. Esimerkiksi: // 1: Never Gonna Give You Up by Rick Astley // 2: Hooked on a Feeling by David Hasselhoff String strConst = ""; for (int i = 0; i < this.songs.size(); i++) { strConst += (i + 1) + ": " + this.songs.get(i) + "\n"; } return strConst; } } ```