1. Odczyt z konsoli,System.in
Na poprzednich wykładach zapoznaliśmy się z komendami wyświetlania. W tym celu użyliśmy obiektu System.out
, jego metod print()
i println()
. Proste i wygodne.
Ale jak już pewnie się domyślacie, jedno wyjście na ekran to za mało. Celem większości programów jest zrobienie czegoś pożytecznego dla użytkownika. Dlatego bardzo często konieczne jest, aby użytkownik mógł wprowadzać dane z klawiatury.
Jeśli chodzi o dane wyjściowe, istnieje również specjalny obiekt do wprowadzania danych - System.in
. Ale niestety dla nas nie jest to tak wygodne, jak byśmy chcieli. Ten obiekt umożliwia odczytywanie danych z klawiatury po jednym znaku na raz.
Dlatego skorzystamy z innej klasy, która w połączeniu z obiektem System.in
da nam wszystko, czego potrzebujemy. Java od dawna ma zajęcia na każdą okazję. Jednego z nich poznamy teraz.
2. KlasaScanner
Klasa Scanner
(pełna nazwa java.util.Scanner
) może odczytywać dane z różnych źródeł: konsoli, plików, internetu. Jeśli chcemy, aby odczytywał dane z klawiatury, musimy przekazać mu System.in
jako parametr obiekt - źródło danych. A obiekt typu Scanner wymyśli, co z nim zrobić.
Czytanie z klawiatury za pomocą obiektu typu Scanner
wyglądałoby mniej więcej tak:
Kod | Wyjaśnienie |
---|---|
|
Tworzymy obiekt klasy Scanner . Czytamy linię tekstuz klawiatury . Odczytujemy numer z klawiatury . |
Wydaje się proste, ale czy naprawdę jest takie proste?
Myślę, że masz wiele pytań, a teraz na nie odpowiemy.
Ale najpierw pokażmy przykład kompletnego programu, w którym użyto klasy Scanner
:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
}
3. Utwórz obiektScanner
Pierwsze pytanie brzmi: co to za ciąg znaków Scanner console = new Scanner (System.in);
?
Taka linia może być myląca, ale przez cały czas będziesz widzieć podobne rzeczy. Uważamy więc, że nadszedł czas, aby wyjaśnić, co jest tutaj napisane.
Przypomnij sobie, jak zwykle tworzymy zmienną z tekstem:
String str = "text";
Najpierw wpisujemy typ zmiennej ( String
), następnie jej nazwę ( str
), a na końcu po znaku równości wpisujemy wartość.
W naszej dziwnej linii wszystko jest w rzeczywistości takie samo:
Scanner console = new Scanner(System.in);
Wszystko na lewo od znaku równości jest deklaracją zmiennej według nazwy console
typu Scanner
. Można to nazwać na przykład s
lub scanner
, a nawet keyboard
. Wtedy kod wyglądałby tak:
Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();
Myślę, że teraz wszystko stało się znacznie jaśniejsze.
A kod po prawej stronie znaku równości jest nieco bardziej skomplikowany. Znaczenie new Scanner(System.in);
Ale tutaj też nie ma nic kosmicznego.
W tym kodzie mówimy do maszyny Javy: utwórz nowy obiekt (word new
) typu Scanner
i podaj do niego jako parametr z czego nowo utworzony obiekt Scanner
będzie pobierał dane - object System.in
.
Po wykonaniu całej tej linii będziemy mieli zmienną type Scanner
o nazwie console
, za pomocą której nasz program będzie mógł odczytywać dane z klawiatury.
4. Metody wywoływania
W powyższym przykładzie nasza zmienna Scanner
console
zawierała odwołanie do obiektu typu Scanner
.
Aby wywołać metody na obiekcie, do którego odwołuje się zmienna, wpisz kropkę po nazwie zmiennej, a następnie nazwę metody i parametry. Ogólna postać tego polecenia jest następująca:
variable.method(arguments);
Przykłady:
System.out.println("Hello");
System.out.println(1);
Jeśli nie planujesz przekazywać parametrów do funkcji, wystarczy napisać puste nawiasy:
variable.method();
Przykład:
System.out.println();
5. Wprowadzanie danych z konsoli
Wprowadzanie danych z klawiatury gdy mamy obiekt typu Scanner
jest bardzo proste.
Aby odczytać ciąg znaków z klawiatury , potrzebujesz polecenia:
String str = console.nextLine();
Gdy program osiągnie wykonanie tej linii, zatrzyma się i zaczeka, aż użytkownik wprowadzi dane i naciśnie klawisz Enter. Następnie wszystko, co wprowadził użytkownik, zostanie zapisane w zmiennej str
.
Aby odczytać liczbę z klawiatury , potrzebujesz polecenia:
int number = console.nextInt();
Wszystko jest podobne do poprzedniego polecenia. Gdy program osiągnie wykonanie tej linii, zatrzyma się i zaczeka, aż użytkownik wprowadzi dane i naciśnie klawisz Enter. Następnie wszystko, co wprowadził użytkownik, zostanie przekonwertowane na liczbę i zapisane w zmiennej number
.
Jeśli użytkownik wprowadzi dane, których nie można przekonwertować na liczbę całkowitą, program wygeneruje błąd i zakończy działanie.
Aby odczytać liczbę ułamkową z klawiatury , potrzebujesz polecenia:
double number = console.nextDouble();
To polecenie jest dokładnie takie samo jak polecenie nextInt()
, tylko sprawdza , czy wprowadzone dane można zamienić na liczbę double
.
Przykład programu, który odczytuje z klawiatury dwie liczby i wyświetla ich sumę:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
}
Użytkownik może wprowadzić wiele liczb w jednym wierszu oddzielonych spacjami: ta sytuacja zostanie poprawnie obsłużona metodami programu Scanner
. Jednak numery zostaną odczytane przez program dopiero po naciśnięciu przez użytkownika Enter
.
6. Inne metody klasoweScanner
Nawiasem mówiąc, nie były to wszystkie metody Scanner
. Pełna lista będzie wyglądać mniej więcej tak:
metoda | Opis |
---|---|
|
Odczytuje dane i konwertuje je na typ byte |
|
Odczytuje dane i konwertuje je na typ short |
|
Odczytuje dane i konwertuje je na typ int |
|
Odczytuje dane i konwertuje je na typ long |
|
Odczytuje dane i konwertuje je na typ float |
|
Odczytuje dane i konwertuje je na typ double |
|
Odczytuje dane i konwertuje je na typ boolean |
|
Czyta jedno „słowo”. Słowa są oddzielone spacjami lub enterem |
|
Czyta całą linię |
Istnieją również metody, które pozwalają na sprawdzenie typu danych, które nie zostały jeszcze odczytane (aby wiedzieć, którą metodą je odczytać).
metoda | Opis |
---|---|
|
Czy istnieje typ byte ? Czy można go przekonwertować byte ? |
|
Czy istnieje typ short ? Czy można go przekonwertować short ? |
|
Czy istnieje typ int ? Czy można go przekonwertować int ? |
|
Czy istnieje typ long ? Czy można go przekonwertować long ? |
|
Czy istnieje typ float ? Czy można go przekonwertować float ? |
|
Czy istnieje typ double ? Czy można go przekonwertować double ? |
|
Czy istnieje typ boolean ? Czy można go przekonwertować boolean ? |
|
Czy jest inne słowo? |
|
Czy jest tam inna linia? |
7. Wprowadzanie danych z ciągu znaków
Powiedzieliśmy już powyżej, że klasa Scanner
może odczytywać dane z różnych źródeł. A jednym z tych źródeł jest linia tekstu.
Będzie to wyglądać mniej więcej tak
String str = "text";
Scanner scanner = new Scanner(str);
When creating the Scanner
object, we pass in the string str
instead of the System.in
object. And now the scanner
object will read data from the string. Example:
Kod programu: | Wyjaśnienie: |
---|---|
|
// a == 10;
// b == 20;
Na ekranie pojawi się: |
GO TO FULL VERSION