• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Klasa skaner - czyszczenie bufora

Cloud VPS
0 głosów
2,116 wizyt
pytanie zadane 2 stycznia 2017 w Java przez rubesom Obywatel (1,690 p.)

Cześć,

Mam kod który działa dobrze:

	public static void main(String[] args) 
	{

		Scanner wejscie = new Scanner(System.in);
		System.out.println("Podaj imię");
		String imie = wejscie.nextLine();
		System.out.println("Witaj " + imie);
		
		System.out.println("Podaj wiek");
		int wiek = wejscie.nextInt();
		System.out.println("Twój wiek to " + wiek);
        }

i podobny który ignoruje drugie pobranie z klawiatury ("String jednostkaPromienia = in.nextLine();"):

	public static void main(String[] args) 
	{
		Scanner in = new Scanner(System.in);
	    System.out.println("Podaj długość promienia koła");
	    double promieńKoła= in.nextDouble();
//	    in.nextLine();
	    System.out.println("Podaj jednoskę długości promienia koła");
	    String jednostkaPromienia = in.nextLine();
	    
	    System.out.println(promieńKoła);
	    System.out.println(jednostkaPromienia);
	}

Doczytałem, że chodzi tu o czyszczenie bufora ale dla czego w pierwszym przypadku działa to bez tego czyszczenia a w drugim muszę podać to co jest zakomentowane?

I jak działa dokładnie to czyszczenie? Nie rozumiem jak wywołanie metody nextLine na obiekcie ma czyścić ten bufor?

 

Proszę o pomoc

2 odpowiedzi

+1 głos
odpowiedź 2 stycznia 2017 przez Mateusz51 Nałogowiec (28,180 p.)
wybrane 3 stycznia 2017 przez rubesom
 
Najlepsza
Chodzi o to że gdy używasz nextInt(), nextDouble() i inne takie. Scanner pobiera Ci tylko tę wartość, zostawiajac w bufforze np znak nowej lini. Gdy użyjesz nextLine() bez wcześniejszego wyczyszczenia buffora to metoda zgodnie z tym co działa zwróci Ci wszystkie znaki do znaku nowej lini.

Jeśli input wyglada tak

17
CM

To nextInt() poda Ci 17, pierwszy nextLine() poda ci string pusty (ponieważ do konca lini już nic nie ma), a drugi nextLine() zwróci ci CM
komentarz 3 stycznia 2017 przez Mateusz51 Nałogowiec (28,180 p.)
edycja 3 stycznia 2017 przez Mateusz51
No nie. Ponieważ nextInt ignoruje wszystkie białe znaki. Czyli pomija entery.
Po drugie nextLine() nie pobiera entera. Pobiera wszystkie znaki do entera. Ale entera nie pobiera. Tylko kasuje go z buffora. Drukujesz enter ponieważ robisz println() który automatycznie dodaje enter.
komentarz 3 stycznia 2017 przez rubesom Obywatel (1,690 p.)

Skoro nextInt() nie pobiera entera tylko znaki liczbowe to skąd w buforze zostają jakieś znaki, że trzeba go czyścić?

		System.out.print("1");
		int a = wejscie.nextInt();
		System.out.print(a);
		String b = wejscie.nextLine();
		System.out.print(b);

Np. w takim kodzie podaję np. cyfrę 25 i bez czyszczenia bufora zostanie zignorowana linia gdzie chciał bym pobrać Stringa, bo jak mówisz jest coś w buforze.

komentarz 3 stycznia 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Bo nextInt pomija tylko białe znaki do wystąpienia liczby. Nie po. Wszystko po liczbie siedzi sobie grzecznie w bufforze.
komentarz 3 stycznia 2017 przez rubesom Obywatel (1,690 p.)
A jak to działa, że nextLine() czyści bufor?
komentarz 3 stycznia 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Wczytuje wszystkie znaki do entera
0 głosów
odpowiedź 3 stycznia 2017 przez operator Stary wyjadacz (10,920 p.)

Prościej będzie z BufferedReader. Pamiętaj o przechwyceniu IOException.
 

BufferedReader bufread = new BufferedReader(new InputStreamReader(System.in));
String str = bufread.readLine();
int wiek = Integer.parseInt( str );
System.out.println( wiek );

 

Podobne pytania

0 głosów
1 odpowiedź 1,050 wizyt
pytanie zadane 3 września 2016 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 329 wizyt
pytanie zadane 23 października 2020 w C i C++ przez adamos321 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 670 wizyt
pytanie zadane 26 kwietnia 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)

93,463 zapytań

142,459 odpowiedzi

322,727 komentarzy

62,840 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...