Java - Klasa Scanner dla początkujących
W tym artykule, klasa Scanner
skupia się na odczytywaniu danych z konsoli pobranych od użytkownika. Jest to jedna z podstawowych czynności, które także na samym początku nauki sprawiają, że pisane programy są dużo bardziej atrakcyjne i bardziej cieszą. W kilku przykładach poniżej znajduje się omówienie części składowych klasy Scanner
oraz jej zastosowanie.
Przykład 1
Załóżmy, że chcemy wczytać od użytkownika imię:
import java.util.Scanner;
public class Przyklad1 {
public static void main(String[] args) {
// *1 *2 *3
Scanner scan = new Scanner(System.in);
System.out.println("Podaj swoje imię");
// *4 *5 *6
String imie = scan.next(); //np. Alex
System.out.println("Witaj " + imie);
}
}
/*
*1 - zmienna typu Scanner
*2 - nadanie nazwy
*3 - tworzenie obiektu typu Scanner
*4 - zmienna typu String
*5 - nazwa zmiennej
*6 - metoda przyjmująca dane od użytkownika, next() zwróci nam String
*/
Wynik
Podaj swoje imię
Alex
Witaj Alex
Uwaga: Należy pamiętać, że
Scanner
znajduje się w pakiecie o nazwiejava.util.
, dlatego należy ją na początku zaimportować do swojej klasy.
Przykład 2
Mamy za zadanie przyjąć od użytkownika imię, nazwisko oraz wiek.
Rozwiązanie
import java.util.Scanner;
public class Przyklad2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Podaj swoje imię");
String imie = scan.next(); //np.Alex
System.out.println("Podaj swoje nazwisko");
String nazwisko = scan.next(); //np.Black
System.out.println("Podaj swój wiek");
int wiek = scan.nextInt(); //np.22
System.out.println("Witaj " + imie + " " + nazwisko + "!");
System.out.println("Twój wiek to: " + wiek);
}
}
Wynik:
Podaj swoje imię
Alex
Podaj swoje nazwisko
Black
Podaj swój wiek
22
Witaj Alex Black!
Twój wiek to: 22
Przykład 3
W tym przykładzie chciałabym pokazać dość powszechny problem, przy przyjmowaniu dłuższych informacji od użytkownika. Załóżmy, że mamy za zadanie wczytać od użytkownika jego ulubiony cytat/motto życiowe:
import java.util.Scanner;
public class Przyklad3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Podaj swój ulubiony cytat");
//np. The limits of my language are the limits of my world.
String cytat = scan.next();
System.out.println("Twój ulubiony cytat: " + cytat);
}
}
Wynik (z błędem):
Podaj swój ulubiony cytat
The limits of my language are the limits of my world.
Twój ulubiony cytat: The
Problem polega na tym, że nasz program pobiera tylko i wyłącznie pierwsze słowo (do spacji). Reszty nie odczytuje. Jak to naprawić?
import java.util.Scanner;
public class Przyklad3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Podaj swój ulubiony cytat");
String cytat = scan.next();
cytat += scan.nextLine(); //należy dodać, że pobieramy od użytkownika cały tekst
System.out.println("Twój ulubiony cytat: " + cytat);
}
}
Wynik (poprawny)
Podaj swój ulubiony cytat
The limits of my language are the limits of my world.
Twój ulubiony cytat: The limits of my language are the limits of my world.