Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Java Local Development Environments Advanced Tooling Refactoring

Sebastian Vargas
Sebastian Vargas
7,408 Points

HELP:Use the rename refactoring to name the Queue from mSongQueue to mSongRequestQueue in KaraokeMachine.java.

I cant pass this tasskk!! I downloaded from teachers note the source code and then make the refactoriang, and run: I hadd no errors... what is going on?

import com.teamtreehouse.KaraokeMachine;

import com.teamtreehouse.model.Song; import com.teamtreehouse.model.SongBook;

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Queue;

public class KaraokeMachine { private SongBook mSongBook; private BufferedReader mReader; private Queue<Song> mSongRequestQueue;

private Map<String, String> mMenu;

public KaraokeMachine(SongBook songBook) { mSongBook = songBook; mReader = new BufferedReader(new InputStreamReader(System.in)); mSongRequestQueue = new ArrayDeque<Song>(); mMenu = new HashMap<String, String>(); mMenu.put("add", "Add a new song to the song book"); mMenu.put("play", "Play next song in the queue"); mMenu.put("choose", "Choose a song to sing!"); mMenu.put("quit", "Give up. Exit the program"); }

private String promptAction() throws IOException { System.out.printf("There are %d songs available and %d in the queue. Your options are: %n", mSongBook.getSongCount(), mSongRequestQueue.size()); for (Map.Entry<String, String> option : mMenu.entrySet()) { System.out.printf("%s - %s %n", option.getKey(), option.getValue()); } System.out.print("What do you want to do: "); String choice = mReader.readLine(); return choice.trim().toLowerCase(); }

public void run() { String choice = ""; do { try { choice = promptAction(); switch(choice) { case "add": Song song = promptNewSong(); mSongBook.addSong(song); System.out.printf("%s added! %n%n", song); break; case "choose": String artist = promptArtist(); Song artistSong = promptSongForArtist(artist); mSongRequestQueue.add(artistSong); System.out.printf("You chose: %s %n", artistSong); break; case "play": playNext(); break; case "quit": System.out.println("Thanks for playing!"); break; default: System.out.printf("Unknown choice: '%s'. Try again. %n%n%n", choice); } } catch(IOException ioe) { System.out.println("Problem with input"); ioe.printStackTrace(); } } while(!choice.equals("quit")); }

private Song promptNewSong() throws IOException { System.out.print("Enter the artist's name: "); String artist = mReader.readLine(); System.out.print("Enter the title: "); String title = mReader.readLine(); System.out.print("Enter the video URL: "); String videoUrl = mReader.readLine(); return new Song(artist, title, videoUrl); }

private String promptArtist() throws IOException { System.out.println("Available artists:"); List<String> artists = new ArrayList<>(mSongBook.getArtists()); int index = promptForIndex(artists); return artists.get(index); }

private Song promptSongForArtist(String artist) throws IOException { List<Song> songs = mSongBook.getSongsForArtist(artist); List<String> songTitles = new ArrayList<>(); for (Song song : songs) { songTitles.add(song.getTitle()); } System.out.printf("Available songs for %s: %n", artist); int index = promptForIndex(songTitles); return songs.get(index); }

private int promptForIndex(List<String> options) throws IOException { int counter = 1; for (String option : options) { System.out.printf("%d.) %s %n", counter, option); counter++; } System.out.print("Your choice: "); String optionAsString = mReader.readLine(); int choice = Integer.parseInt(optionAsString.trim()); return choice - 1; }

public void playNext() { Song song = mSongRequestQueue.poll(); if (song == null) { System.out.println("Sorry there are no songs in the queue." + " Use choose from the menu to add some"); } else { System.out.printf("%n%n%n Open %s to hear %s by %s %n%n%n", song.getVideoUrl(), song.getTitle(), song.getArtist()); } } }

com/teamtreehouse/KaraokeMachine.java

4 Answers

Patrik Horváth
Patrik Horváth
11,110 Points

simpel open your code in " IntelliJ" if you using NETBEANS/BlueJ/... uninstall it ... why ? in real life u never use NETBEANS almost EVERY COMPANY use IntelliJ, ok Eclipse is also fine but need install a lot of plugins ..., then select word "mSongQueue" and SHIFT + F6 or Right click Refactor -> Rename and rename it to "mSongRequestQueue" if you done it will change this in whole project :) this is MAGIC called REFACTORING :)

i cant help you more cause this project request all files and you need also fallow video :)

Hope i help :), better start now with intelliJ then leater, it has FREE COMUNTIY version or if you student you have 4 years free licence :) ( only if you have ISIC card )

Sebastian Vargas
Sebastian Vargas
7,408 Points

I did that and the code shows no errors, I pasted that results and still having: Bummer! Are you sure you followed along with the refactoring video? The queue should be of SongRequests

This is frustrating

Hi Sebastian, I'm having the same problem. Have you happened to complete this step yet. If you have, any help would be appreciated. Thanks

Sebastian Vargas
Sebastian Vargas
7,408 Points

Yes I solved it... My problem was noob. I didnt follow the steps and changes from the video, you need to do the refactoring asked in the task but also you need the changes made at the video.

Thanks but I'v gone away and done this and it's still not working. I come to realise I thinks its because my project doesn't include a SongRequest class to refactor to, and iv gone back and downloading to original teachers notes to make sure I hadn't accidentally deleted it. Did you have to create a songRequest class? And if so What would it look like? Thanks.