pobieranie tekstu Scanner nextLine()

0

Mam drobny problem z pobieraniem tekstu za pomocą nextLine(), poniższy kod działa tak jakbym tego oczekiwał dopóki nie dojdzie do pobrania stringu za pomocą nextLine():

public static String dodawanieKsiazki() {
        Scanner in = new Scanner(System.in);
        System.out.println("\n *** Dodawanie Nowej Pozycji *** ");
        System.out.print("Proszę podać tytuł: ");
        String tytul = in.next();
        System.out.print("Proszę podać nazwisko autora: ");
        String nazwisko = in.next();
        System.out.print("Proszę podać imiona autora: ");
        String imie = in.nextLine();
        System.out.print("Proszę podać rok wydania: ");
        int rok = in.nextInt();
        System.out.print("Proszę podać kategorię: ");
        String kategorie = in.nextLine();

        Ksiazka nowaKsiazka = new Ksiazka(tytul, nazwisko, imie, rok, kategorie);

        return nowaKsiazka.toString();
    }

gdy dochodzi do pobrania tekstu za pomocą nextLine() wyświetla od razu kolejną linie kodu bez pobrania stringa od użytkownika:

 
 *** Dodawanie Nowej Pozycji *** 
Proszę podać tytuł: bla
Proszę podać nazwisko autora: bla
Proszę podać imiona autora: Proszę podać rok wydania: 

Nie chce używać samego next(), ponieważ chce pobrać znaki również poza spacją.
Nie wiem jak sobie poradzić z tym problemem.

0

Wczytaj pusta linie po nazwisku autora.

1

Stringi pobieraj nextLine(), po pobraniu daty nextInt(), powinieneś również pobrać znak nowej linii, ponieważ nexInt pobiera samą cyfrę bez \n. Czyli coś takiego:

public static String dodawanieKsiazki() {
        Scanner in = new Scanner(System.in);
        System.out.println("\n *** Dodawanie Nowej Pozycji *** ");
        System.out.print("Proszę podać tytuł: ");
        String tytul = in.nextLine();
        System.out.print("Proszę podać nazwisko autora: ");
        String nazwisko = in.nextLine();
        System.out.print("Proszę podać imiona autora: ");
        String imie = in.nextLine();
        System.out.print("Proszę podać rok wydania: ");
        int rok = in.nextInt();
        in.nextLine();
        System.out.print("Proszę podać kategorię: ");
        String kategorie = in.nextLine();
 
        Ksiazka nowaKsiazka = new Ksiazka(tytul, nazwisko, imie, rok, kategorie);
 
        return nowaKsiazka.toString();
    }
0

Dziękuję. Teraz kod działa jak należy. Tylko zastanawia mnie dlaczego wszystkie stringi powinienem pobierać nextLine().

0
DonVitoMarco napisał(a):

Dziękuję. Teraz kod działa jak należy. Tylko zastanawia mnie dlaczego wszystkie stringi powinienem pobierać nextLine().

NextLine() pobiera Ci Stringa wraz ze znakiem \n, ale zwraca sam tekst bez znaku nowej linii i nie musisz potem osobno pobierać znaku nowej linii żeby nie mieć problemu z jakim się spotkałeś. Jak użyjesz next() to pobierze Ci do znaku nowej linii bez niego i w konsekwencji potem musisz pobrać jeszcze znak nowej linii.

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