Problem ze Scannerem

0

Witam.
Pisze program zarządzający biblioteka. Mam metodę ktora pobiera parametry ksiazki od uzytkownika a nastepnie tworzy nowy obiekt. Przy pierwszym wywolaniu metody wszystko jest dobrze, ale przy drugim Scanner pomija jedna linijke. Wrzucam kod w celu wyjasnienia o co mi chodzi.

public void createNewBook(){
		System.out.println("Podaj autora.");
		String author = skaner.nextLine();
		System.out.println("Podaj tytul.");
		String title = skaner.nextLine();
		System.out.println("Podaj ilosc stron.");
		int numberOfPages = skaner.nextInt();
		System.out.println("Podaj cene.");
		double prize = skaner.nextDouble();
		Book ksiaza = new Book(author, title, numberOfPages, prize);
		bookList.add(ksiaza);
		System.out.println("Ksiazka dodana do rejestru!");
			
	}

Wynik konsoli:

Podaj autora.
JK Rowlin
Podaj tytul.
Hari Pota
Podaj ilosc stron.
600
Podaj cene.
30
Ksiazka dodana do rejestru!
Podaj autora.
Podaj tytul.
Muminki
Podaj ilosc stron.
40
Podaj cene.
40
Ksiazka dodana do rejestru!
Book: Hari Pota of JK Rowlin has 600 pages and ID: 1. Costs 30.0$ and currently we have 1 copies.
Book: Muminki of  has 40 pages and ID: 1. Costs 40.0$ and currently we have 1 copies.
0

Spójrz tu, to powinno wyjaśnić i rozwiązać Twój problem:
http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo

W ostateczności jak Ci się nie chce czytać to zrób coś w tym stylu:

public static void createNewBook(){
        System.out.println("Podaj autora.");
        String author = skaner.nextLine();
        System.out.println("Podaj tytul.");
        String title = skaner.nextLine();
        System.out.println("Podaj ilosc stron.");
        int numberOfPages = Integer.parseInt(skaner.nextLine());
        System.out.println("Podaj cene.");
        double prize =Double.parseDouble( skaner.nextLine());
        
        Book ksiaza = new Book(author, title, numberOfPages, prize);
        bookList.add(ksiaza);
        System.out.println("Ksiazka dodana do rejestru!");

    }

Pamiętaj tylko, żeby dodać do Integer.parseInt i Double.parseDouble try-catch bo może rzucić błędem

0

po skanter.nextInt() i skanter.nextDouble() dodaj skaner.nextLine() dla konsumpcji pustej linii wygenerowanej przez skaner.

1 użytkowników online, w tym zalogowanych: 0, gości: 1