I’m writing a program that allows the users to create a custom playlist. I have currently gotten all inputs, assigned them values and placed them in an object.
However, when I try to append this object to an ArrayObject, it only appends int duration
, and upon output, it simply prints
Duration: X (with X being the value inputted by the user).
What am I doing wrong here?
import java.util.ArrayList; import java.util.Scanner; class Track { public String title, artist, genre; public int duration; public Track(String title, String artist, String genre, int duration) { this.title = title; //ti this.artist = artist; //t this.genre = genre; //d this.duration = duration; //id } public String getTitle() { return title; } public String getArtist() { return artist; } public String getGenre() { return genre; } public int getDuration() { return duration; } public void setTitle(String title) { this.title = title; } public void setArtist(String artist) { this.artist = artist; } public void setGenre(String genre) { this.genre = genre; } public void setDuration(int duration) { this.duration = duration; } public void printEntry() { System.out.print("Title: "+title+"nArtist: "+artist+"nType: "+genre+"n"+toString()); } public String toString() { return "Duration: "+duration; } }
class MyPlaylist { private ArrayList<Track> songList; private static int songCount = 0; public static boolean programActive = true; public static void main(String[] args){ while (programActive) { userInterface(); } } public MyPlaylist() { songList = new ArrayList<Track>(); } public MyPlaylist(Track entry) { songList = new ArrayList<Track>(); songList.add(entry); } public void addEntry (Track entry) { songList.add(entry); } public void printList(Track[] songs) { for (int i = 0; i < songs.length; i++){ songs[i].printEntry(); } } public Track[] getPlaylist() { Track[] l = new Track[songList.size()]; System.out.println(songList.size()); for(int i = 0; i < l.length; i++){ l[i] = songList.get(i); } return l; } public void deleteTrack(int trackNum) { } // --- MAIN USER INTERFACE --- private static void userInterface() { MyPlaylist songPlaylist = new MyPlaylist(); Scanner userInput = new Scanner(System.in); System.out.println("n1 - Add a new songn2 - List all songsn3 - Delete an existing songn4 - Search for a songn5 - Display total playtimen6 - exitnPlease enter your choice:"); int input = userInput.nextInt(); switch (input) { case 1: Scanner newSongEntry = new Scanner(System.in); System.out.println("nTitle of the song:"); String title = newSongEntry.nextLine(); System.out.println("Name of the artist:"); String artist = newSongEntry.nextLine(); System.out.println("Type of the song:"); String genre = newSongEntry.nextLine(); System.out.println("Duration (seconds):"); int duration = newSongEntry.nextInt(); Track newEntry = new Track(title, artist, genre, duration); songPlaylist.addEntry(newEntry); break; case 2: songPlaylist.printList(songPlaylist.getPlaylist()); break; case 3: break; case 4: break; case 5: break; case 6: System.out.println("nThank you. Bye!"); programActive = false; } } }
Advertisement
Answer
Since you’re declaring songPlaylist
in userInterface()
, the playlist is being remade from scratch after every time you perform and action on it.
I would suggest declaring songPlaylist
in main() and passing it to userInterface
like this:
public static void main(String[] args){ MyPlaylist songPlaylist = new MyPlaylist(); while (programActive) { userInterface(songPlaylist); } }
and this paramater for userInterface
:
private static void userInterface(MyPlaylist songPlaylist) { ... }
so you can keep the code inside userInterface