Bob Marny
Bob Marny

Reputation: 21

Scanner issue, input information not working

the question, I look at the code millions of times, may be I just can't see the simple answer but why at the point of Author name and Author Surname, system print out like this:

Enter author Name: Enter author Surname: 

and it should be like this...

Enter author Name: 
Enter author Surname:

and if I input information in system remember only Author first name and I can't put information for surname.

import java.util.Scanner;

public class BookTest {

    public static void main(String[] args) {    

        Scanner scan = new Scanner (System.in);

        Book bookIn = new Book();

        System.out.print("Enter book title: ");
        bookIn.setTitleBook(scan.nextLine());



        System.out.print("Enter author Name: ");
        bookIn.setFirstName(scan.nextLine());

        System.out.print("Enter author Surname: ");
        bookIn.setSecondName(scan.nextLine());

        System.out.print("Enter author Nationality: ");
        bookIn.setNationality(scan.nextLine());




        System.out.print("Enter book price: ");
        bookIn.setPriceBook(scan.nextDouble());

        System.out.print("Enter book ISBN: ");
        bookIn.setIsbn(scan.nextInt());




        System.out.println("Title: " +bookIn.getTitleBook());
        System.out.println("Author: "+ bookIn.getFirstName()+ " " + bookIn.getSecondName());
        System.out.println("Price: "+bookIn.getPriceBook());
        System.out.println("ISNB Number: "+bookIn.getIsbn());
        System.out.println("Aurhor Nationality: " + bookIn.getNationality());



    }
}

Book Class

public class Book {

    private double priceBook;
    private int isbn;
    private String titleBook;
    private String firstName;
    private String secondName;
    private String nationality;


    public void setTitleBook(String titleBook){
        this.titleBook = titleBook;
    }
    public String getTitleBook(){
        return titleBook;
    }


    public void setPriceBook(double priceBook) {
        this.priceBook = priceBook;
    }
    public double getPriceBook() {
        return priceBook;
    }


    public void setIsbn(int isbn) {
        this.isbn = isbn;
    }
    public int getIsbn() {
        return isbn;
    }



    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getFirstName() {
        return firstName;
    }




    public void setSecondName(String secondName) {
        this.secondName = secondName;
    }
    public String getSecondName() {
        return secondName;
    }


    public void setNationality(String nationality) {
        this.nationality = nationality;
    }
    public String getNationality() {
        return nationality;
    }



}

Upvotes: 0

Views: 154

Answers (1)

Kevin Bowersox
Kevin Bowersox

Reputation: 94429

Move the scanner to the next line after reading the ISBN. When using Scanner.nextInt the input only reads the number and not the new line character created when you press enter. Calling Scanner.nextLine after Scanner.nextInt reads the new line character and clears the buffer.

import java.util.Scanner;

public class BookTest {

    public static void main(String[] args) {    

        Scanner scan = new Scanner (System.in);

        Book title = new Book();
        Book price = new Book();
        Book isbn = new Book();
        Book fName = new Book();
        Book sName = new Book();
        Book nation = new Book();

        System.out.print("Enter book title: ");
        title.setTitleBook(scan.nextLine());

        System.out.print("Enter book price: ");
        price.setPriceBook(scan.nextDouble());

        System.out.print("Enter book ISBN: ");
        isbn.setIsbn(scan.nextInt());

        scan.nextLine(); //NOTICE CHANGE HERE
        //System.out.println(); THIS WAS REMOVED


        System.out.print("Enter author Name: ");
        fName.setFirstName(scan.nextLine());

        System.out.print("Enter author Surname: ");
        sName.setSecondName(scan.nextLine());

        System.out.print("Enter author Nationality: ");
        nation.setNationality(scan.nextLine());


    System.out.println("Title: " +title.getTitleBook());
    System.out.println("Price: "+price.getPriceBook());
    System.out.println("ISNB Number: "+isbn.getIsbn());

    System.out.println("Author: "+ fName.getFirstName() + sName.getSecondName());
    System.out.println("Aurhor Nationality: " + nation.getNationality());



    }
}

Upvotes: 1

Related Questions