Scanner - dlaczego pomija linię do odczytu

0

Hej,

Pytanie dotyczy poniższego kodu - dlaczego Scanner pomija odczyt stringa s jeżeli nie doda się przed nim lini scan.nextLine(); którą oznaczyłem gwiazdkami w poniższym kodzie?

public class Solution {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int i = scan.nextInt();
    double d =scan.nextDouble();
    scan.nextLine();   ******************************************************************************************************************
    String s=scan.nextLine();

    // Write your code here.

    System.out.println("String: " + s);
    System.out.println("Double: " + d);
    System.out.println("Int: " + i);
}

}

4
scan.nextInt();

oraz

scan.nextDouble();

Zaczytują tylko wartość liczbową, ale nie konsumują znaku nowej linii, który wysyłasz wciskając enter po wpisaniu wartości w konsoli. Trzeba wstawić pusty nextLine() aby ją skonsumować, a dopiero w następnej linii jeszcze raz zaczytać nextLine() jako Twój string. Oczywiście da się to zrobić trochę bardziej elegancko, ale nie będę Ci mieszał.

0

Dziękuję za odpowiedź. Własnie widze że mogę podać liczbę a potem string po spacji i wczytać to automatycznie do dwóch zmienych jeżeli mam najpierw nextInt a potem nextLine

2

Metody nextInt(), nextDouble() itp. sczytują tylko inty i double (jak nazwa wskazuje). Metoda nextLine() sczytuję całą linię, aż do entera, a metoda next() sczytuję jeden wyraz (zlepek znaków) czyli to o co Ci chodzi.

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