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.outsale . 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. Scannerclasa

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.inca 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 Scannerobiect ar arăta cam așa:

Cod Explicaţie
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Creăm un Scannerobiect.
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ă Scannerclasa:

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 Scannerobiect

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";
Declararea și inițializarea unei variabile șir

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);
Declararea și inițializarea unei Scannervariabile

Tot ce se află în stânga semnului egal este declarația unei variabile numite consoleal cărei tip este Scanner. În schimb, ai putea să-l numești s sau scannersau 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 newcheie) al cărui tip este Scanner , trecând obiectul System.inca sursă de date pentru Scannerobiectul nou creat.

După ce executăm toată această linie, vom avea o Scannervariabilă 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 consolevariabila noastră stochează o referință la un Scannerobiect.

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);
Apelarea unei metode pe un obiect referit de o variabilă

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();
Apelarea unei metode fără a trece argumente

Exemplu:

System.out.println();

5. Intrare consola

Când avem un Scannerobiect, 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 numbervariabilă.

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 doublenumă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);
   }
}
Notă

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 Scannerclasei

Apropo, metodele de mai sus nu sunt tot ceea ce Scannerare de oferit clasa. Lista completă a metodelor arată cam așa:

Metodă Descriere
nextByte()
Citește datele și le convertește în abyte
nextShort()
Citește datele și le convertește în ashort
nextInt()
Citește datele și le convertește într-unint
nextLong()
Citește datele și le convertește în along
nextFloat()
Citește datele și le convertește în afloat
nextDouble()
Citește datele și le convertește în adouble
nextBoolean()
Citește datele și le convertește în aboolean
next()
Citește un „token”. Jetoanele sunt separate prin spații sau apăsări ale tastei Enter
nextLine()
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
hasNextByte()
Există un byte? Intrarea poate fi convertită într-un byte?
hasNextShort()
Există un short? Intrarea poate fi convertită într-un short?
hasNextInt()
Există un int? Intrarea poate fi convertită într-un int?
hasNextLong()
Există un long? Intrarea poate fi convertită într-un long?
hasNextFloat()
Există un float? Intrarea poate fi convertită într-un float?
hasNextDouble()
Există un double? Intrarea poate fi convertită într-un double?
hasNextBoolean()
Există un boolean? Intrarea poate fi convertită într-un boolean?
hasNext()
Există un alt simbol?
hasNextLine()
Există o altă linie?

7. Citirea datelor dintr-un șir

Am menționat anterior că Scannerclasa 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 strloc de System.inobiect. Și acum scannerobiectul va citi date din șir. Exemplu:

Cod program: Explicaţie:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

      System.out.println(a + b);
   }
}




// a == 10; 
// b == 20; 
Ieșirea ecranului va fi:30