1. Lettura dalla console utilizzandoSystem.in

Nelle lezioni precedenti abbiamo familiarizzato con i comandi per la visualizzazione delle informazioni sullo schermo. Per fare ciò, abbiamo utilizzato l' System.outoggetto ei suoi metodi print()e println(). È semplice e conveniente.

Ma, come probabilmente avrai già intuito, la visualizzazione delle informazioni sullo schermo non è sufficiente per noi. Lo scopo della maggior parte dei programmi è fare qualcosa di utile per l'utente. Ciò significa che molto spesso è necessario che l'utente sia in grado di inserire i dati dalla tastiera.

Proprio come nel caso dell'output, abbiamo anche un oggetto speciale per l'input dei dati: System.in. Ma, sfortunatamente per noi, non è conveniente come vorremmo. Ci permette di leggere i dati dalla tastiera un carattere alla volta.

Per migliorare questo, useremo un'altra classe che, se abbinata all'oggetto System.in, ci darà tutto ciò di cui abbiamo bisogno. Da molto tempo Java offre lezioni adatte a ogni occasione. E ora ne conosceremo uno.


2. Scannerclasse

La Scannerclasse (nome completo: java.util.Scanner) può leggere dati da fonti diverse, ad esempio la console, i file e Internet. Se vogliamo che legga i dati dalla tastiera, dobbiamo passare l' System.inoggetto come argomento che fungerà da origine dati. E poi l'oggetto Scanner capirà cosa farne.

La lettura dalla tastiera utilizzando un Scanneroggetto sarebbe simile a questa:

Codice Spiegazione
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Creiamo un Scanneroggetto.
Leggiamo una riga di testo dalla tastiera.
Leggiamo un numero dalla tastiera.

Sembra facile, ma è davvero così semplice?

Penso che tu debba avere un sacco di domande, e ora risponderemo.

Ma prima, dimostriamo un esempio di un programma completo che utilizza la Scannerclasse:

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. Creare un Scanneroggetto

La prima domanda è cos'è questa linea Scanner console = new Scanner (System.in);?

Questa linea può creare confusione, ma vedrai sempre cose simili. Quindi pensiamo che sia importante spiegare cosa sta succedendo qui.

Ricorda come di solito creiamo una variabile con il testo:

String str = "text";
Dichiarazione e inizializzazione di una variabile stringa

Prima scriviamo il tipo di variabile ( String), poi il suo nome ( str), e infine, dopo il segno uguale, scriviamo il valore.

La nostra linea sconcertante è in realtà la stessa:

Scanner console = new Scanner(System.in);
Dichiarazione e inizializzazione di una Scannervariabile

Tutto a sinistra del segno di uguale è la dichiarazione di una variabile denominata consoleil cui tipo è Scanner. Potresti invece chiamarlo s o scannero anche keyboard. Quindi il codice sarebbe simile a questo:

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();

Penso che questo renda tutto molto più chiaro.

Ma il codice a destra del segno uguale è un po' più complicato. Mi riferisco ora a new Scanner(System.in); Detto questo, anche qui non sta accadendo nulla di soprannaturale.

In questo codice, diciamo alla macchina Java: crea un nuovo oggetto (la newparola chiave) il cui tipo è Scanner , passando l' System.inoggetto come origine dati per l' Scanneroggetto appena creato.

Dopo aver eseguito l'intera riga, avremo una Scannervariabile denominata console che il nostro programma utilizzerà per leggere i dati dalla tastiera.


4. Elenco dei metodi

Nell'esempio sopra, la nostra Scanner consolevariabile memorizza un riferimento a un Scanneroggetto.

Per chiamare metodi su un oggetto a cui fa riferimento una variabile, si scrive un punto dopo il nome della variabile, seguito dal nome del metodo e da eventuali argomenti. L'aspetto generale del comando è il seguente:

variable.method(arguments);
Chiamare un metodo su un oggetto a cui fa riferimento una variabile

Esempi:

System.out.println("Hello");
System.out.println(1);

Se non prevedi di passare argomenti a una funzione, scrivi solo parentesi vuote:

variable.method();
Chiamare un metodo senza passare argomenti

Esempio:

System.out.println();

5. Ingresso consolle

Quando abbiamo un Scanneroggetto, è facile ottenere dati dalla tastiera.

Per leggere una riga dalla tastiera , è necessario questo comando:

String str = console.nextLine();

Quando l'esecuzione del programma raggiunge questa riga, si fermerà e attenderà che l'utente inserisca i dati e prema Invio. Quindi tutto ciò che l'utente ha inserito viene memorizzato nella variabile str.

Per leggere un numero dalla tastiera , è necessario questo comando:

int number = console.nextInt();

Tutto qui è come il comando precedente. Quando l'esecuzione del programma raggiunge questa riga, si fermerà e attenderà che l'utente inserisca i dati e prema Invio. Successivamente, tutto ciò che l'utente ha inserito viene convertito in un numero e memorizzato nella numbervariabile.

Se l'utente ha inserito dati che non possono essere convertiti in un numero intero, il programma genererà un errore e uscirà.

Per leggere un numero frazionario dalla tastiera , è necessario questo comando:

double number = console.nextDouble();

Questa istruzione è molto simile a quella con il nextInt()metodo, solo che controlla che i dati inseriti possano essere convertiti in un doublenumero.

Esempio di programma che legge due numeri dalla tastiera e ne visualizza la somma sullo schermo:

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);
   }
}
Nota

L'utente può inserire più numeri su una singola riga, separandoli con spazi: i metodi della Scannerclasse sanno come gestire questo. Detto questo, il programma legge i numeri solo dopo che l'utente ha premuto Enter.



6. Altri metodi della Scannerclasse

A proposito, i metodi di cui sopra non sono tutto ciò che la Scannerclasse ha da offrire. L'elenco completo dei metodi è simile al seguente:

Metodo Descrizione
nextByte()
Legge i dati e li converte in abyte
nextShort()
Legge i dati e li converte in ashort
nextInt()
Legge i dati e li converte in un fileint
nextLong()
Legge i dati e li converte in along
nextFloat()
Legge i dati e li converte in afloat
nextDouble()
Legge i dati e li converte in adouble
nextBoolean()
Legge i dati e li converte in aboolean
next()
Legge un "token". I token sono separati da spazi o dalla pressione del tasto Invio
nextLine()
Legge un'intera riga

Esistono anche metodi che ti consentono di controllare il token successivo nell'input senza effettivamente recuperarlo (per sapere quale metodo utilizzare per leggerlo).

Metodo Descrizione
hasNextByte()
C'è un byte? L'input può essere convertito in un byte?
hasNextShort()
C'è un short? L'input può essere convertito in un short?
hasNextInt()
C'è un int? L'input può essere convertito in un int?
hasNextLong()
C'è un long? L'input può essere convertito in un long?
hasNextFloat()
C'è un float? L'input può essere convertito in un float?
hasNextDouble()
C'è un double? L'input può essere convertito in un double?
hasNextBoolean()
C'è un boolean? L'input può essere convertito in un boolean?
hasNext()
C'è un altro gettone?
hasNextLine()
C'è un'altra linea?

7. Lettura dei dati da una stringa

Abbiamo detto in precedenza che la Scannerclasse può leggere i dati da varie fonti. Una di queste fonti è una stringa di testo .

Assomiglia a questo:

String str = "text";
Scanner scanner = new Scanner(str);

Quando creiamo l' Scanneroggetto, passiamo la stringa strinvece dell'oggetto System.in. E ora l' scanneroggetto leggerà i dati dalla stringa. Esempio:

Codice programma: Spiegazione:
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);
   }
}




// un == 10; 
// b == 20; 
L'output dello schermo sarà:30