PlayList Project [ArrayList]

A PlayList project will be based on Three Classes

  • Artist
  • Song
  • PlayList

The Artist class will store core information about an artist

The Song class will store basic information about a music song

The PlayList class will manage a list of artists and their ratings

Song

  • Constructor(s):
    • public Song( Artist _artist, String _name)
  • Instance Variables
    • private Artist artist
    • private String name
  • Methods
    • public String getName()
    • public Artist getArtist()
    • public boolean equals(Song other) //returns true  if both the song objects have the same artist and name.
    • public String toString()

Artist

  • Constructor(s) :

    • public Artist(String name)
  • Instance Variables
    • private String artistName ;
    • private ArrayList<Song>  songs  ; – an array storing the songs of this artist
  • Methods
    • public void addSong(String song) . Create a song object (see above) and add it to the arraylist. Here’s the first line.  :
      •  add-song
    • public String toString()
    • public boolean equals(Artist other)  //returns true  if the names (only) are the same
    • public ArrayList<Song> getSongs()
    • public String getName()

 

NOTE: The method below should appear in your code in the exact same order that I have listed them (to facilitate grading). 1 point off for not following this straightforward request.  In addition to submitting via repl.it,

PlayList

  • Static Variable
    • public static int MAX_NUMBER_SONGS= 6 ; // for easy testing (updated – 2.4.2020)

  • Instance Variables

    • private String listName  ; This is the ‘name’ of your playList
    • private ArrayList<Song> songs  ;
    • private ArrayList<Integer> stars   ;//how many stars each song has
    • Note: songs and stars are parallel ArrayLists
  • Constructor
    • public PlayList(String name) : There should be only 1 constructor that takes a parameter representing the name of the playList
  • Accessor Methods
    • public double averageRating()  // returns the average star rating for the  list
    • public ArrayList<Song> getSongs()  // returns the songs
    • public double averageRating(Artist artist) // returns the mean star rating associated with artist
    • public Song[] getSongs(Artist artist)  // returns an array populated by the songs of parameter artist
    • public ArrayList<Artist> getArtist(String songName) // returns an ArrayList of all Artists associated with the String songName (This could be multiple musicians. Cover songs etc..)
    • private int indexOf(Song someSong)  //
    • public String toString()  //returns an appropriate String representation of the PlayList

    Mutator Methods

    • public void swap(Song song1 ,  Song song2, ) // switches positions of these two (maintain parallelism!)
    • public boolean add(Song _song , int _stars)
      //adds data if number of song is less than MAX_NUMBER_SONGS
    • public void removeSong(Song song) /removes all occurrences of song by artist. There could be multiple instances of song
    • public void removeArtist(Artist artist )  //removes all elements associated with artist
    • public void removeLowStars(int cutOff)  //removes all elements associated with a star rating less than or equal to cutOff
      • public ArrayList<Integer> getStars()  //returns the stars  ArrayList

The method’s below are extra credit. If you figure out how to do them, you must also meet with me after school about the methods. To receive the extra credit, be prepared for a mini-quiz on how they work.  Be prepared for me to ask about your solution and how changing certain parts of your code would affect your solution. This meeting must happen on the Monday or Wednesday following the deadline.

 

  • ** public PlayList sortByRating() //this returns a rearranged playlist so that the 5 starred elements are the first group in the list, 4 stars second …1 stars, last
    • To do this , you should use a sorting algorithm. I suggest, Selection Sort (link). As this both intuitive and on the AP.
  • ** public PlayList shuffle()/ /this returns a new PlayList in which all of the songs have been reordered randomly

When you’re done this, begin exploring different sorting algorithms with this online sorting detective :

 

https://labs.penjee.com/sort-detective/

 

sort-detective