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

Java. Problem z scanner.nextInt()

0 głosów
69 wizyt
pytanie zadane 17 lutego w Java przez użytkownika gab123 Mądrala (5,160 punkty)
edycja 17 lutego przez użytkownika gab123

Witam, mam sobie taki programik :

@SuppressWarnings("resource")
        Scanner odczyt = new Scanner(System.in);
int t = Integer.parseInt(odczyt.nextLine());
		
		for(;t>0;t--){
			
			int n = Integer.parseInt(odczyt.nextLine());
			
			for(int i = 0; i<n; i++){
				
				int liczba = odczyt.nextInt();
				
				System.out.println(liczba);
}
}

 

Wpisuje taki input :

3

5

1 2 3 4 5

I wszystko działa do momentu gdy wpisuje ostatnią piątke i klikam enter, w tedy pojawia mi się błąd :

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at konskurs_pseudomatematyczny.Main.main(Main.java:20)

Wskazuje na tą linie :

			int n = Integer.parseInt(odczyt.nextLine());

Sprawdzałam jednak że jak się usunie zawartość drugiej pętli wszystko działa.

Z góry dziękuje za pomoc.

2 odpowiedzi

+1 głos
odpowiedź 17 lutego przez użytkownika Mateusz51 Dyskutant (9,760 punkty)
wybrane 17 lutego przez użytkownika gab123
 
Najlepsza
Problem jest taki że nextInt() nie pobiera Ci z buffora znaku nowej lini. I gdy wywołujesz nextLine() scaner pobiera Ci właśnie ten znak nowej lini który nie może zostać sparsowany. Rozwiazaniem może być wstawienie miedzy 14 a 15 linijke pusty nextLine()
komentarz 17 lutego przez użytkownika gab123 Mądrala (5,160 punkty)
Dziękuje.
0 głosów
odpowiedź 17 lutego przez użytkownika Codeboy Bywalec (2,420 punkty)

Na pierwszy rzut oka wydaję się, że gdzieś pusty string jest przekazywany do parseInt i wyrzuca bład.
Zamień wszystkie:

Integer.parseInt(odczyt.nextLine());

na po prostu na 

odczyt.nextInt();

I nie powinno być problemów.

Podobne pytania

0 głosów
2 odpowiedzi 85 wizyt
pytanie zadane 17 stycznia w Java przez użytkownika PejtaM Użytkownik (530 punkty)
0 głosów
1 odpowiedź 43 wizyt
pytanie zadane 15 stycznia w Java przez użytkownika dmn Nowicjusz (170 punkty)
+1 głos
3 odpowiedzi 52 wizyt
pytanie zadane 4 listopada 2016 w Java przez użytkownika anhydryt Początkujący (300 punkty)
...