Java fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

4.7 KiB

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-luokat löytyvät 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

Playlist.java

import java.util.ArrayList;
public class Playlist {
private ArrayList<Song> songs = new ArrayList<Song>();
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;
}
}