1. Citirea de pe consolă folosindSystem.in
În lecțiile anterioare, ne-am familiarizat cu comenzile pentru afișarea informațiilor pe ecran. Pentru a face acest lucru, am folosit obiectul și metodele System.out
sale . Este simplu și convenabil.print()
println()
Dar, după cum probabil ați ghicit deja, afișarea informațiilor pe ecran nu este suficientă pentru noi. Scopul majorității programelor este de a face ceva util pentru utilizator. Asta înseamnă că de foarte multe ori este necesar ca utilizatorul să poată introduce date de la tastatură.
Așa cum a fost cazul pentru ieșire, avem și un obiect special pentru intrarea datelor — System.in
. Dar, din păcate pentru noi, nu este atât de convenabil pe cât ne-am dori. Ne permite să citim datele de la tastatură câte un caracter .
Pentru a îmbunătăți acest lucru, vom folosi o altă clasă care, atunci când este asociată cu obiectul System.in
, ne va oferi tot ce avem nevoie. De mult timp, Java are cursuri potrivite pentru fiecare ocazie. Și acum îl vom cunoaște pe unul dintre ei.
2. Scanner
clasa
Clasa Scanner
(nume complet: java.util.Scanner
) poate citi date din diferite surse, de exemplu, consolă, fișiere și Internet. Dacă dorim ca acesta să citească date de la tastatură, atunci trebuie să trecem obiectul System.in
ca argument care va servi drept sursă de date. Și apoi obiectul Scanner își va da seama ce să facă cu el.
Citirea de la tastatură folosind un Scanner
obiect ar arăta cam așa:
Cod | Explicaţie |
---|---|
|
Creăm un Scanner obiect. Citim o linie de text de la tastatură. Citim un număr de la tastatură. |
Pare ușor, dar este chiar atât de simplu?
Cred că trebuie să aveți o grămadă de întrebări, iar acum le vom răspunde.
Dar mai întâi, să demonstrăm un exemplu de program complet care utilizează Scanner
clasa:
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. Crearea unui Scanner
obiect
Prima întrebare este ce este această linie Scanner console = new Scanner (System.in);
?
Această linie poate fi confuză, dar veți vedea lucruri similare tot timpul. Așa că credem că este important să explicăm ce se întâmplă aici.
Amintiți-vă cum creăm de obicei o variabilă cu text:
String str = "text";
Mai întâi scriem tipul variabilei ( String
), apoi numele acesteia ( str
), iar în final, după semnul egal, scriem valoarea.
Linia noastră uluitoare este de fapt aceeași:
Scanner console = new Scanner(System.in);
Tot ce se află în stânga semnului egal este declarația unei variabile numite console
al cărei tip este Scanner
. În schimb, ai putea să-l numești s
sau scanner
sau chiar keyboard
. Atunci codul ar arăta astfel:
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();
Cred că asta face totul mult mai clar.
Dar codul din dreapta semnului egal este puțin mai complicat. Mă refer acum la new Scanner(System.in);
Acestea fiind spuse, nici aici nu se întâmplă nimic supranatural.
În acest cod, îi spunem mașinii Java: creați un nou obiect (cuvântul new
cheie) al cărui tip este Scanner
, trecând obiectul System.in
ca sursă de date pentru Scanner
obiectul nou creat.
După ce executăm toată această linie, vom avea o Scanner
variabilă numită console
pe care programul nostru o va folosi pentru a citi datele de pe tastatură.
4. Lista metodelor
În exemplul de mai sus, Scanner
console
variabila noastră stochează o referință la un Scanner
obiect.
Pentru a apela metode pe un obiect referit de o variabilă, scrieți un punct după numele variabilei, urmat de numele metodei și orice argument. Aspectul general al comenzii este următorul:
variable.method(arguments);
Exemple:
System.out.println("Hello");
System.out.println(1);
Dacă nu intenționați să transmiteți argumente unei funcții, atunci scrieți doar paranteze goale:
variable.method();
Exemplu:
System.out.println();
5. Intrare consola
Când avem un Scanner
obiect, este ușor să obținem date de la tastatură.
Pentru a citi o linie de la tastatură , aveți nevoie de această comandă:
String str = console.nextLine();
Când execuția programului ajunge la această linie, se va întrerupe și aștepta ca utilizatorul să introducă date și să apese Enter. Apoi, tot ce a introdus utilizatorul este stocat în variabilă str
.
Pentru a citi un număr de la tastatură , aveți nevoie de această comandă:
int number = console.nextInt();
Totul aici este ca comanda anterioară. Când execuția programului ajunge la această linie, se va întrerupe și aștepta ca utilizatorul să introducă date și să apese Enter. După aceea, tot ceea ce a introdus utilizatorul este convertit într-un număr și stocat în number
variabilă.
Dacă utilizatorul a introdus date care nu pot fi convertite într-un număr întreg, programul va genera o eroare și va ieși.
Pentru a citi un număr fracționar de la tastatură , aveți nevoie de această comandă:
double number = console.nextDouble();
Această afirmație este foarte asemănătoare cu cea cu nextInt()
metoda, doar că verifică dacă datele introduse pot fi convertite într-un double
număr.
Exemplu de program care citește două numere de la tastatură și afișează suma lor pe ecran:
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);
}
}
Utilizatorul poate introduce mai multe numere pe o singură linie, separându-le cu spații: metodele clasei Scanner
știu să gestioneze acest lucru. Acestea fiind spuse, programul citește numerele numai după ce utilizatorul apasă Enter
.
6. Alte metode ale Scanner
clasei
Apropo, metodele de mai sus nu sunt tot ceea ce Scanner
are de oferit clasa. Lista completă a metodelor arată cam așa:
Metodă | Descriere |
---|---|
|
Citește datele și le convertește în abyte |
|
Citește datele și le convertește în ashort |
|
Citește datele și le convertește într-unint |
|
Citește datele și le convertește în along |
|
Citește datele și le convertește în afloat |
|
Citește datele și le convertește în adouble |
|
Citește datele și le convertește în aboolean |
|
Citește un „token”. Jetoanele sunt separate prin spații sau apăsări ale tastei Enter |
|
Citește un rând întreg |
Există, de asemenea, metode care vă permit să verificați următorul token din intrare fără a-l prelua efectiv (pentru a ști ce metodă să utilizați pentru a-l citi).
Metodă | Descriere |
---|---|
|
Există un byte ? Intrarea poate fi convertită într-un byte ? |
|
Există un short ? Intrarea poate fi convertită într-un short ? |
|
Există un int ? Intrarea poate fi convertită într-un int ? |
|
Există un long ? Intrarea poate fi convertită într-un long ? |
|
Există un float ? Intrarea poate fi convertită într-un float ? |
|
Există un double ? Intrarea poate fi convertită într-un double ? |
|
Există un boolean ? Intrarea poate fi convertită într-un boolean ? |
|
Există un alt simbol? |
|
Există o altă linie? |
7. Citirea datelor dintr-un șir
Am menționat anterior că Scanner
clasa poate citi date din diverse surse. Una dintre aceste surse este un șir de text .
Arata cam asa:
String str = "text";
Scanner scanner = new Scanner(str);
Când creăm obiectul Scanner
, trecem șirul în str
loc de System.in
obiect. Și acum scanner
obiectul va citi date din șir. Exemplu:
Cod program: | Explicaţie: |
---|---|
|
// a == 10;
// b == 20;
Ieșirea ecranului va fi: |
GO TO FULL VERSION