in.nextLine(); - o co chodzi?

0

Cześć, co dokładnie robi metoda nextLine();? Mam taki kod:

import java.util.InputMismatchException;
import java.util.Scanner;

public class Dzielenie
{

	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		boolean isNotCorrect = true;
		do
		{
			try
			{
				System.out.println("Wprowadź licznik");
				int l = in.nextInt();

				System.out.println("Wprowadź mianownik");
				int m = in.nextInt();

				System.out.println(l + " / " + m + " = " + l / m);

				isNotCorrect = false;
			} 
			catch (InputMismatchException ime)
			{
				// ime.printStackTrace();
				System.err.println("Złe dane wejściowe");
				in.nextLine();
				System.out.println("Wprowadź dane ponownie");
			}
			catch (ArithmeticException ae)
			{
				// ae.printStackTrace();
				System.err.println("Dzielenie przez zero");
				System.out.println("Wprowadź dane ponownie");
			}
		}
		while (isNotCorrect);

		in.close();
	}

}

i nie rozumiem tej części:


catch (InputMismatchException ime)
			{
				// ime.printStackTrace();
				System.err.println("Złe dane wejściowe");
				in.nextLine();
				System.out.println("Wprowadź dane ponownie");
			}

dlaczego in.nextLine(); przerwało w tym wypadku błędne wykonywanie się programu a in.nextInt(); nie?

0

Nie bardzo rozumiem pytanie. Generalnie kod pobierania danych i operowania na nich jest w pętli która zakończy się dopiero gdy nie wystąpi żaden wyjątek. Jeśli takowy wystąpi, program łapie go i informuje Cię o tym. Funkcja nextLine() jest funkcją zwracającą zmienną typu String, oraz przesuwająca "aktualną linię czytaną" na następną. Jak dla mnie jest ona tu nie potrzebna i można się jej pozbyć. Program po ponownym wykonywaniu tego co w try{} "przesunie" aktualny czytany element na koleją liczbę.

PS podobno BufferedReader jest szybszy od Scannera z tym że on to co "czyta" przetwarza na String, więc do twojego programu wymagane było by jeszcze Parsowanie.

0

W sumie to ta linia sprawia ze aplikacja czeka na enter od usera.

0

Masz racje. Ale w sumie nie bardzo tu potrzebne

1

@mućka, ta linia raczej sprawia, że z bufora klawiatury zostaną usunięte błędne dane. Bez tego wiersza (in.nextLine()), program, po wpisaniu, niepoprawnych danych wchodzi w nieskończoną pętlę.

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