Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Java Java Data Structures Efficiency! Menu UI

Sean Flanagan
Sean Flanagan
33,232 Points

Problems with KaraokeMachine

Hi. My KaraokeMachine has generated a ton of errors. Here it is:

package com.teamtreehouse;

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.HashMap;
import java.util.Map;

public class KaraokeMachine {
  private SongBook mSongBook;
  private BufferedReader mReader;
  private Map<String, String> mMenu;

  public KaraokeMachine(SongBook songBook) {
    mSongBook = songBook;
    mReader = new BufferedReader(new InputStreamReader(System.in));
    mMenu = new HashMap<String, String>();
    mMenu.put("add", "Add a new song to the song book");
    mMenu.put("quit", "Give up. Exit the program");
  }

  private String promptAction() throws IOException {
    System.out.printf("There are %d songs available. Your options are: %n",
                      mSongBook.getSongCount());
    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 "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);
  }
}

Next, I'll list the errors:

./com/teamtreehouse/KaraokeMachine.java:61: error: while expected                                
  }                                                                                              
   ^                                                                                             
./com/teamtreehouse/KaraokeMachine.java:63: error: ')' expected                                  
  private Song promptNewSong() {                                                                 
              ^                                                                                  
./com/teamtreehouse/KaraokeMachine.java:63: error: -> expected                                   
  private Song promptNewSong() {                                                                 
                              ^                                                                  
./com/teamtreehouse/KaraokeMachine.java:63: error: not a statement                               
  private Song promptNewSong() {                                                                 
                            ^                                                                    
./com/teamtreehouse/KaraokeMachine.java:65: error: cannot find symbol                            
    String.artist = mReader.readLine();                                                          
          ^                                                                                      
./com/teamtreehouse/KaraokeMachine.java:65: error: cannot find symbol                            
    String.artist = mReader.readLine();                                                          
          ^                                                                                      
  symbol:   variable artist                                                                      
  location: class String                                                                         
./com/teamtreehouse/KaraokeMachine.java:67: error: cannot find symbol                            
    String.title = mReader.readLine();                                                           
          ^                                                                                      
  symbol:   variable title                                                                       
  location: class String                                                                         
./com/teamtreehouse/KaraokeMachine.java:69: error: cannot find symbol                            
    String.videoUrl = mReader.readLine();                                                        
          ^                                                                                      
  symbol:   variable videoUrl                                                                    
  location: class String                                                                         
./com/teamtreehouse/KaraokeMachine.java:70: error: cannot find symbol                            
    return new Song(artist, title, videoUrl);                                                    
treehouse:~/workspace$                                                                           

I'd be grateful for any help. :-)

3 Answers

Craig Dennis
STAFF
Craig Dennis
Treehouse Teacher

Looks like promptNewSong is outside of your class. Correct the try to have the catch right after it. You are missing a closing paren.

Sean Flanagan
Sean Flanagan
33,232 Points

Hi Craig. Thanks for replying. I've added the closing parenthesis. But I'm confused about the rest. When you say I should correct the try to have the catch right after it, do you mean I should type:

try {

}
catch

It's just that I'm still getting errors.

Sean Flanagan
Sean Flanagan
33,232 Points

Hi Craig. Just to let you know I've fixed the errors. Near the end of my KaraokeMachine class were 3 errors, each involving a dot that shouldn't have been there, between String and artist, between String and title, and between String and videoUrl. I've deleted all the dots and my program is now running. Thank to you and Allan for your help. :-)

Allan Clark
Allan Clark
10,810 Points
 } catch(IOException ioe) {
        System.out.println("Problem with input");
        ioe.printStackTrace();
      } // <-------- this one
    } while (!choice.equals("quit"));
  }

It looks like you have too many '}' try deleting the one I marked and running it again. The hint from the error list "error: while expected }" is telling you that the do-while loop was closed but it didn't find the while part.

Sean Flanagan
Sean Flanagan
33,232 Points

Hi Allan. Thanks for your reply.

I deleted said } but the program still won't run.

Here's what I have now:

package com.teamtreehouse;

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.HashMap;
import java.util.Map;

public class KaraokeMachine {
  private SongBook mSongBook;
  private BufferedReader mReader;
  private Map<String, String> mMenu;

  public KaraokeMachine(SongBook songBook) {
    mSongBook = songBook;
    mReader = new BufferedReader(new InputStreamReader(System.in));
    mMenu = new HashMap<String, String>();
    mMenu.put("add", "Add a new song to the song book");
    mMenu.put("quit", "Give up. Exit the program");
  }

  private String promptAction() throws IOException {
    System.out.printf("There are %d songs available. Your options are: %n",
                      mSongBook.getSongCount());
    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 "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);
  }
}

And the errors:

./com/teamtreehouse/KaraokeMachine.java:72: error: reached end of file while parsing             
}                                                                                                
 ^                                                                                               
./com/teamtreehouse/KaraokeMachine.java:45: error: cannot find symbol                            
            Song song = promptNewSong();                                                         
                        ^                                                                        
  symbol:   method promptNewSong()                                                               
  location: class KaraokeMachine                                                                 
./com/teamtreehouse/KaraokeMachine.java:63: error: cannot find symbol                            
  private Song promptNewSong() throws IOException {                                              
          ^                                                                                      
  symbol:   variable Song                                                                        
  location: class KaraokeMachine                                                                 
./com/teamtreehouse/KaraokeMachine.java:63: error: illegal start of type                         
  private Song promptNewSong() throws IOException {                                              
  ^                                                                                              
./com/teamtreehouse/KaraokeMachine.java:63: error: lambda expression not expected here           
  private Song promptNewSong() throws IOException {                                              
                            ^                                                                    
./com/teamtreehouse/KaraokeMachine.java:65: error: cannot find symbol                            
    String.artist = mReader.readLine();                                                          
          ^                                                                                      
  symbol:   variable artist                                                                      
  location: class String                                                                         
./com/teamtreehouse/KaraokeMachine.java:67: error: cannot find symbol                            
    String.title = mReader.readLine();                                                           
          ^                                                                                      
  symbol:   variable title                                                                       
  location: class String                                                                         
./com/teamtreehouse/KaraokeMachine.java:69: error: cannot find symbol                            
    String.videoUrl = mReader.readLine();                                                        
          ^                                                                                      
  symbol:   variable videoUrl                                                                    
  location: class String

I'm not sure what else to do. Thanks for your help though. :-)

Sean Flanagan
Sean Flanagan
33,232 Points

Here's my KaraokeMachine as it presently stands:

package com.teamtreehouse;

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.HashMap;
import java.util.Map;

public class KaraokeMachine {
  private SongBook mSongBook;
  private BufferedReader mReader;
  private Map<String, String> mMenu;

  public KaraokeMachine(SongBook songBook) {
    mSongBook = songBook;
    mReader = new BufferedReader(new InputStreamReader(System.in));
    mMenu = new HashMap<String, String>();
    mMenu.put("add", "Add a new song to the song book");
    mMenu.put("quit", "Give up. Exit the program");
  }

  private String promptAction() throws IOException {
    System.out.printf("There are %d songs available. Your options are: %n",
                      mSongBook.getSongCount());
    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 "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);
  }
}

And the errors:

          ^                                                                                      
  symbol:   variable artist                                                                      
  location: class String                                                                         
./com/teamtreehouse/KaraokeMachine.java:67: error: cannot find symbol                            
    String.title = mReader.readLine();                                                           
          ^                                                                                      
  symbol:   variable title                                                                       
  location: class String                                                                         
./com/teamtreehouse/KaraokeMachine.java:69: error: cannot find symbol                            
    String.videoUrl = mReader.readLine();                                                        
          ^                                                                                      
  symbol:   variable videoUrl                                                                    
  location: class String                                                                         
./com/teamtreehouse/KaraokeMachine.java:70: error: cannot find symbol                            
    return new Song(artist, title, videoUrl);                                                    
                    ^                                                                            
  symbol:   variable artist                                                                      
  location: class KaraokeMachine                                                                 
./com/teamtreehouse/KaraokeMachine.java:70: error: cannot find symbol                            
    return new Song(artist, title, videoUrl);                                                    
                            ^                                                                    
  symbol:   variable title                                                                       
  location: class KaraokeMachine                                                                 
./com/teamtreehouse/KaraokeMachine.java:70: error: cannot find symbol                            
    return new Song(artist, title, videoUrl);                                                    
                                   ^                                                             
  symbol:   variable videoUrl                                                                    
  location: class KaraokeMachine                                                                 
6 errors                  
Craig Dennis
Craig Dennis
Treehouse Teacher

There seem to be dots between your type declaration and variable name. The String.title error, that's not what you meant is it?