Wczytywanie wielu linijek z liczbami z wejścia standardowego

0

Hej, rozwiązuję zadanie z hackerrank i mam do sczytania wiele linijek zawierających różną liczbę liczb. Rozkminiłem sobie, że z każdej linijki będę tworzyć listę Integerów a następnie wrzucał to do listy list. Wszystko ładnie działa, ale mam problem z zamknięciem scannera. Po utworzeniu listy list wciąż nasłuchuje.

import java.util.*;

public class Solution {
    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */

        List<List<Integer>> listList = new ArrayList<>();

        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNextLine()) {
            List<Integer> integerList = new ArrayList<>();
            Scanner lineScanner = new Scanner(scanner.nextLine());

            while (lineScanner.hasNextInt()) {
                integerList.add(lineScanner.nextInt());
            }
            listList.add(integerList);
            lineScanner.close();

        }
        scanner.close();

        System.out.println(listList);
    }
}
0
            final String line=scanner.nextLine();
            if(line.length()>0)
            {
              Scanner lineScanner = new Scanner(line);
              while (lineScanner.hasNextInt()) {
                integerList.add(lineScanner.nextInt());
              }
            }
0
3l3ctric_philip napisał(a):

w jaki sposób ma to zamknąć Scanner i zakończyć działanie programu?

Nie ma czegoś takiego jak "zamknąć Scanner".

Scanner działa tak, że pobiera czekajacy tekst z wejścia standardowego, jeśli nie ma nic na wejściu, wtedy scaner blokuje aż coś będzie i zwraca. W momencie w którym juz zawołasz scanner.next() albo scanner.nextInt(), to program blokuje dopóki czegoś nie wpiszesz. Jeśli chcesz zamknąć program, to należałoby sprawdzić wcześniej czy scanner.hasNext(), i jeśli nie ma niczego na wejściu standardowych, to po prostu nie wołaj .next().

0

co w takim razie robi metoda close z klasy Scanner?

1
3l3ctric_philip napisał(a):

co w takim razie robi metoda close z klasy Scanner?

Metoda Scanner.close() zamyka scanner w takim sensie, że zamyka również InputStream na którym nasłuchuje Scanner.

Ja zrozumiałem Twoje pytanie w jaki sposób ma to zamknąć Scanner i zakończyć działanie programu? że chodzi Ci o to "jak zrobić żeby program się wyłączył".

1
3l3ctric_philip napisał(a):

co w takim razie robi metoda close z klasy Scanner?

Jeżeli Scanner działa na pliku to blokujesz plik dopóki nie zamkniesz tegoż Scannera.
Poza tym naucz się korzystać z documentcji, google: Java Scanner close
Nie rozumiem czemu ci prościej nasmarować znacznie dłuższy post niż skorzystać z google.

0

Korzystałem, ale w dokumentacji jest niewielka wzmianka o tej metodzie.

0

Na innym forum dostałem taką odpowiedź. Na czym polega czyszczenie końca linii?

"Scanner tak ma
Ja czytasz int to musisz wyczyścić znak końca lini.
Jak kolejny ma czytać coś innego niż int to najlepiej zrobić
Scanner.hasnext();
Wtedy już przestaje nasłuchiwać
Wynik tego nie trzeba do żadnej zmiennej przypisawać bo to tylko koniec linii jest"

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