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 |
|---|---|
|
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";
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);
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);
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 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);
}
}
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 |
|---|---|
|
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ă 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: |
|---|---|
|
// a == 10;
// b == 20;
Ieșirea ecranului va fi: |
GO TO FULL VERSION