Member 14048022 Ответов: 1

Java пропускает scan.nextline() ?


Привет всем!
Java не читает scan.nextLine() после меню библиотеки. Я не мог понять, почему это происходит. Я был бы признателен за любую помощь :)








package main;
import java.util.*;
import classes.*;
import java.util.Scanner;
public class LibraryTest
{
   public static void main( String[] args)
   {
      //variables
      String input;
      LibraryBook book;
      Library library;
      Scanner scan = new Scanner( System.in);
      LibraryBook b1;    
      LibraryBook b2; 
      LibraryBook b3;
      LibraryBook b4;
      String title;
      int control;
      
      //initializations
      book = null;    
      library = new Library();
      b1 = null;
      b2 = null;
      b3 = null;
      b4 = null;
      title = "";
      control = 0;
      
      library.add( "My Diary 1","Pınar Yücel");
      library.add( "My Diary 2","Pınar Yücel");
      library.add( "My Diary 3","Pınar Yücel");
      library.add( "My Diary 4","Pınar Yücel");
      
      do // do until user enters Exit.
      {
         System.out.println("*************");
         System.out.println("LIBRARY MENU");
         System.out.println("Show");
         System.out.println("Find");
         System.out.println("Add");
         System.out.println("Exit");
         System.out.println("*************");
         
         input = scan.nextLine();
         
         if ( input.equals( "Show"))
         {
            System.out.println( library.toString());
         }
         
         if ( input.equals( "Add"))
         {
            
            System.out.println( "Please enter the title and the author of the book that you want to add");
            library.add( scan.next(), scan.next());
            
         } 
         
         if ( input.equals( "Find"))
         {
            System.out.println( "Please enter the title of the book that you want to find.");
            title = scan.nextLine();
            book = library.findByTitle( title);
            
            if ( book != null)
            {
               System.out.println( "Book selected");
               control = 1;
            }
            else
            {
               System.out.println( "There is no such book!");
            }
            
            
            while ( control == 1) 
            {        
               System.out.println("*************");
               System.out.println("BOOK MENU");
               System.out.println("Loan it");
               System.out.println("Return it");
               System.out.println("Remove it");
               System.out.println("Exit to main menu");
               System.out.println("*************");
               
               input = scan.nextLine();
               
               if ( input.equals( "Loan it"))
               {
                  System.out.println( "Enter the due date");
                  book.loanBook( scan.next());
               }
               
               if ( input.equals( "Exit to main menu"))
               {
                  control = 0;
               }
               
               if ( input.equals( "Remove it"))
               {
                  library.remove ( book);
               }
               
               if ( input.equals( "Return it"))
               {
                  book.returnBook();
               }
               
            }
         }         
      }while ( !input.equals( "Exit"));    
   }   
}


Что я уже пробовал:

Я попытался заменить Scan.nextLine() на scan.next()

Richard MacCutchan

Я только что попробовал его, и он отлично работает. Вам нужно предоставить более подробную информацию.

Member 14048022

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

1 Ответов

Рейтинг:
5

Richard MacCutchan

В следующем коде ...

if ( input.equals( "Add"))
{

    System.out.println( "Please enter the title and the author of the book that you want to add");
    library.add( scan.next(), scan.next());
    
} 

.. у вас есть два звонка, чтобы scan.next(), который вводит следующие два слова. Однако это оставляет конец линии все еще ожидающим, чтобы быть потребленным. Поэтому в следующий раз, когда меню будет напечатано, scan.nextLine() колл прочитает это, а затем снова пойдет по кругу.


Member 14048022

Большое спасибо..