KWALIFIKACJA INF2 + INF3 - CZERWIEC 2011

PYTANIE NR 8.
W języku Java klasa Scanner zapewnia komunikację z wejściem programu. Obiekt tej klasy utworzą instrukcje
Ilustracja przedstawia fragment pytania egzaminacyjnego związanego z programowaniem w języku Java, dotyczącego klasy Scanner.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Obiekt klasy Scanner tworzy się przez wywołanie konstruktora z użyciem operatora new, zwykle dla standardowego wejścia: new Scanner(System.in). Sama dyrektywa import nie tworzy obiektu, a System.in jest tylko strumieniem wejściowym przekazywanym do konstruktora.

Pełne wyjaśnienie:

Klasa Scanner w Javie służy do wygodnego odczytu danych (tokenów) z różnych źródeł, np. ze standardowego wejścia, pliku lub napisu. Aby z niej korzystać, trzeba utworzyć obiekt tej klasy, czyli wywołać jej konstruktor. Najczęściej spotykana postać to utworzenie skanera dla klawiatury (konsoli): new Scanner(System.in).

Dlaczego tak?
W Javie obiekt powstaje dopiero po użyciu operatora new oraz konstruktora. System.in jest gotowym strumieniem wejściowym typu wejściowego, który przekazuje się jako argument, aby Scanner wiedział, skąd ma czytać dane.

Typowe pułapki w odpowiedziach (dlaczego są błędne):

  • Samo importowanie (np. wskazanie pakietu) nie tworzy obiektu – import jedynie umożliwia użycie nazwy klasy bez pełnej ścieżki pakietu.
  • Użycie samego System.in nie jest utworzeniem Scanner – to tylko źródło danych, a nie obiekt Scanner.
  • Pominięcie operatora new lub błędna składnia konstruktora oznacza, że obiekt nie zostanie utworzony.

Wskazówka egzaminacyjna: szukaj instrukcji, która jednocześnie (1) ma new, (2) wywołuje Scanner(...), (3) jako argument często ma System.in. To komplet cech tworzenia obiektu do wejścia programu.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Najczęściej tworzy się go konstruktorem z System.in: new Scanner(System.in). To oznacza: utwórz obiekt Scanner i podepnij go pod standardowe wejście programu (konsolę), aby móc potem używać np. nextInt() lub nextLine().
System.in to standardowy strumień wejścia (dane od użytkownika). Scanner potrzebuje źródła, z którego ma czytać, więc przekazuje się mu strumień w konstruktorze. Bez tego Scanner nie wie, skąd pobierać znaki i jak je interpretować.
Import sprawia, że możesz używać nazwy Scanner bez pełnej ścieżki pakietu java.util. Import nie tworzy obiektu i nie uruchamia czytania danych — to tylko ułatwienie w kodzie źródłowym, aby kompilator znał klasę.
Najczęściej pojawiają się: nextInt(), nextDouble(), next() i nextLine(). Trzeba pamiętać, że nextLine() czyta całą linię, a metody typu nextInt() zostawiają znak końca linii w buforze.
To efekt bufora wejścia: nextInt() pobiera liczbę, ale zwykle nie "zjada" końca linii. Następne nextLine() może wtedy odczytać pusty fragment do końca tej samej linii. Typowe rozwiązanie: wykonać dodatkowe nextLine() po odczycie liczby.
Nie. Scanner może czytać także z innych źródeł, np. z pliku lub napisu. Kluczowe jest to, że w konstruktorze podajesz źródło danych (np. strumień lub tekst). Konsola to tylko najczęstszy przypadek w zadaniach podstawowych.
W praktyce zamknięcie Scanner zamyka też powiązany strumień. W małych programach konsolowych zwykle zamyka się go na końcu działania. W większych aplikacjach bywa to problematyczne, gdy inne części programu też korzystają z System.in.
Poprawna instrukcja powinna mieć postać inicjalizacji obiektu: typ, nazwa zmiennej, operator =, następnie new Scanner(...). Często argumentem jest System.in. Same nazwy pakietów lub strumieni bez new nie tworzą obiektu.
Tak, ale trzeba użyć pełnej nazwy klasy z pakietem, np. new java.util.Scanner(System.in). Import jest wygodą, nie wymogiem działania. Na egzaminie częściej spotyka się zapis z importem, bo jest czytelniejszy.
Najczęstsze to: mylenie next() z nextLine(), brak obsługi pustej linii po odczycie liczby, pomijanie new przy tworzeniu obiektu oraz założenie, że sam import "uruchamia" Scanner. Warto ćwiczyć krótkie programy wejścia/wyjścia.
info

Około 63% zdających odpowiada poprawnie na to pytanie. średnie

Eksperci podkreślają: "Obiekt klasy Scanner tworzy się przez wywołanie konstruktora z użyciem operatora new, zwykle dla standardowego wejścia: new Scanner(System.in)."

Źródła:

  • Oracle Java SE Documentation — Class Scanner (java.util.Scanner) — konstruktor Scanner(InputStream): https://docs.oracle.com/en/java/javase/ (sekcja API: java.util.Scanner) - accessed 2026-02-18
  • Oracle Tutorials — Basic I/O — Using Scanner: https://docs.oracle.com/javase/tutorial/essential/io/scanning.html - accessed 2026-02-18

Materiały:

  • Dokumentacja Oracle Java SE dla klasy Scanner
  • Oficjalny tutorial Oracle: Basic I/O i użycie Scanner
  • Notatki z podstaw Javy: obiekty, konstruktory, importy

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego