2016-07-20 2 views
0

У меня проблемы с этим кодом. Это неполное, но сейчас моя цель - проверить, работает ли меню. В основном я пытаюсь реализовать меню. Если введен неверный символ, продолжайте предлагать правильный выбор. Подсказка: Внедрите Quit перед реализацией других опций. Не могу понять, что я делаю неправильно, чтобы получить эту ошибку.NoSuchElement в моем коде

import java.util.Scanner; 

public class Playlist 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     String title = ""; 

     System.out.println("Enter playlist's title: "); 
     title = input.nextLine();   
     printMenu(title); 
    } 

    // Implement the printMenu() method. 
    // printMenu() takes the playlist title as a parameter and outputs a menu of options to manipulate the playlist. 
    // Each option is represented by a single character. 
    // Build and output the menu within the method. 

    public static void printMenu(String playlistTitle) 
    { 
     Scanner input = new Scanner(System.in); 
     boolean menu = true; 
     String option; 

     SongEntry songentry = new SongEntry(); 

     System.out.println(playlistTitle + " PLAYLIST MENU"); 
     System.out.println("a - Add song"); 
     System.out.println("d - Remove song"); 
     System.out.println("c - Change position of song"); 
     System.out.println("s - Output songs by specific artist"); 
     System.out.println("t - Output total time of playlist (in seconds)"); 
     System.out.println("o - Output full playlist"); 
     System.out.println("q - Quit"); 
     System.out.println("");   


     while(menu == true) 
     { 
      System.out.println("Choose an option: "); 

       switch(option = input.next()) 
       { 
        case "q": 

         menu = false; 

         break; 

        case "o": 

         System.out.println(playlistTitle + " - OUTPUT FULL PLAYLIST"); 

         break; 

        case "a": 

         System.out.println("ADD SONG"); 
         System.out.println("Enter song's unique ID: "); 
         System.out.println("Enter song's name: "); 
         System.out.println("Enter artist's name: "); 
         System.out.println("Enter song's length: "); 

         break; 

        case "d": 

         System.out.println("REMOVE SONG"); 
         System.out.println("Enter a song's unique ID: "); 
         System.out.println(" removed"); 

         break; 

        case "c": 

         System.out.println("CHANGE POSITION OF SONG"); 
         System.out.println("Enter a song's current position: "); 
         System.out.println("Enter a new position for song: "); 
         System.out.println(" moved to position "); 

         break; 

        case "s": 

         System.out.println("OUTPUT SONGS BY SPECIFIC ARTIST"); 
         System.out.println("Enter artist's name: "); 

         break; 

        case "t": 

         System.out.println("OUTPUT TOTAL TIME OF PLAYLIST (IN SECONDS)"); 
         System.out.println("Total time: seconds"); 

         break; 
       } 
      } 
     } 
} 

Когда я бегу, я получаю:

Исключение в потоке "основного" java.util.NoSuchElementException на java.util.Scanner.throwFor (Scanner.java:907) в java.util. Scanner.next (Scanner.java:1416) в Playlist.printMenu (Playlist.java:45) в Playlist.main (Playlist.java:12)

Спасибо за помощь заранее.

+0

Вы должны проверить, есть ли у сканера что-либо в своем буфере через 'input.hasNext()' перед вызовом 'input.next()'. –

+0

Возможный дубликат [Нет исключения такого элемента?] (Http://stackoverflow.com/questions/8032099/no-such-element-exception) –

+0

Вы никогда не должны проверять '== true'. – shmosel

ответ

0

Попробуйте закрыть сканер перед вызовом метода, у вас есть два сканера открыть при входе переключателя

+0

Фактически, закрытие сканера также закроет основной поток ('System.in'), что сделает другой сканер непригодным для использования. Лучше всего использовать только один объект сканера и передавать его, если необходимо. Тем не менее, я думаю, что фактическая проблема связана не с проверкой состояния сканера перед вызовом 'next()'. –

0

Я на самом деле обнаружил, что мне нужно, чтобы пройти сканер в метод printMenu. Он работает сейчас. Спасибо всем за предложения!

import java.util.Scanner; 

public class Playlist 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     String title = ""; 

     System.out.println("Enter playlist's title: "); 
     title = input.nextLine();   
     printMenu(title, input); 
    } 

    // Implement the printMenu() method. 
    // printMenu() takes the playlist title as a parameter and outputs a menu of options to manipulate the playlist. 
    // Each option is represented by a single character. 
    // Build and output the menu within the method. 

    public static void printMenu(String playlistTitle, Scanner input) 
    { 

     boolean menu = true; 
     String option; 

     SongEntry songentry = new SongEntry(); 

     System.out.println(playlistTitle + " PLAYLIST MENU"); 
     System.out.println("a - Add song"); 
     System.out.println("d - Remove song"); 
     System.out.println("c - Change position of song"); 
     System.out.println("s - Output songs by specific artist"); 
     System.out.println("t - Output total time of playlist (in seconds)"); 
     System.out.println("o - Output full playlist"); 
     System.out.println("q - Quit"); 
     System.out.println("");   


     while(menu == true) 
     { 
      System.out.println("Choose an option: "); 

       switch(option = input.next()) 
       { 
        case "q": 

         menu = false; 

         break; 

        case "o": 

         System.out.println(playlistTitle + " - OUTPUT FULL PLAYLIST"); 

         break; 

        case "a": 

         System.out.println("ADD SONG"); 
         System.out.println("Enter song's unique ID: "); 
         System.out.println("Enter song's name: "); 
         System.out.println("Enter artist's name: "); 
         System.out.println("Enter song's length: "); 

         break; 

        case "d": 

         System.out.println("REMOVE SONG"); 
         System.out.println("Enter a song's unique ID: "); 
         System.out.println(" removed"); 

         break; 

        case "c": 

         System.out.println("CHANGE POSITION OF SONG"); 
         System.out.println("Enter a song's current position: "); 
         System.out.println("Enter a new position for song: "); 
         System.out.println(" moved to position "); 

         break; 

        case "s": 

         System.out.println("OUTPUT SONGS BY SPECIFIC ARTIST"); 
         System.out.println("Enter artist's name: "); 

         break; 

        case "t": 

         System.out.println("OUTPUT TOTAL TIME OF PLAYLIST (IN SECONDS)"); 
         System.out.println("Total time: seconds"); 

         break; 
       } 
      } 
     } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^