Scanner - dlaczego pomija linię do odczytu

Scanner - dlaczego pomija linię do odczytu
DZ
  • Rejestracja:prawie 7 lat
  • Ostatnio:14 dni
  • Postów:52
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);
}

}

Inquis1t0r
  • Rejestracja:ponad 12 lat
  • Ostatnio:17 minut
  • Postów:287
4
Kopiuj
scan.nextInt();

oraz

Kopiuj
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ł.


"I am like a mage invoking incantations into a mysterious black box, conjuring useful applications and bending it to my will."
edytowany 1x, ostatnio: Inquis1t0r
veneficus
Mógłbyś napisać jak zrobić coś takiego bardziej elegancko?
DZ
  • Rejestracja:prawie 7 lat
  • Ostatnio:14 dni
  • Postów:52
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

HE
HE
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 4 lata
  • Postów:88
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.