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.out
oggetto 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. Scanner
classe
La Scanner
classe (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.in
oggetto come argomento che fungerà da origine dati. E poi l'oggetto Scanner capirà cosa farne.
La lettura dalla tastiera utilizzando un Scanner
oggetto sarebbe simile a questa:
Codice | Spiegazione |
---|---|
|
Creiamo un Scanner oggetto. 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 Scanner
classe:
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 Scanner
oggetto
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";
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);
Tutto a sinistra del segno di uguale è la dichiarazione di una variabile denominata console
il cui tipo è Scanner
. Potresti invece chiamarlo s
o scanner
o 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 new
parola chiave) il cui tipo è Scanner
, passando l' System.in
oggetto come origine dati per l' Scanner
oggetto appena creato.
Dopo aver eseguito l'intera riga, avremo una Scanner
variabile denominata console
che il nostro programma utilizzerà per leggere i dati dalla tastiera.
4. Elenco dei metodi
Nell'esempio sopra, la nostra Scanner
console
variabile memorizza un riferimento a un Scanner
oggetto.
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);
Esempi:
System.out.println("Hello");
System.out.println(1);
Se non prevedi di passare argomenti a una funzione, scrivi solo parentesi vuote:
variable.method();
Esempio:
System.out.println();
5. Ingresso consolle
Quando abbiamo un Scanner
oggetto, è 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 number
variabile.
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 double
numero.
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);
}
}
L'utente può inserire più numeri su una singola riga, separandoli con spazi: i metodi della Scanner
classe sanno come gestire questo. Detto questo, il programma legge i numeri solo dopo che l'utente ha premuto Enter
.
6. Altri metodi della Scanner
classe
A proposito, i metodi di cui sopra non sono tutto ciò che la Scanner
classe ha da offrire. L'elenco completo dei metodi è simile al seguente:
Metodo | Descrizione |
---|---|
|
Legge i dati e li converte in abyte |
|
Legge i dati e li converte in ashort |
|
Legge i dati e li converte in un fileint |
|
Legge i dati e li converte in along |
|
Legge i dati e li converte in afloat |
|
Legge i dati e li converte in adouble |
|
Legge i dati e li converte in aboolean |
|
Legge un "token". I token sono separati da spazi o dalla pressione del tasto Invio |
|
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 |
---|---|
|
C'è un byte ? L'input può essere convertito in un byte ? |
|
C'è un short ? L'input può essere convertito in un short ? |
|
C'è un int ? L'input può essere convertito in un int ? |
|
C'è un long ? L'input può essere convertito in un long ? |
|
C'è un float ? L'input può essere convertito in un float ? |
|
C'è un double ? L'input può essere convertito in un double ? |
|
C'è un boolean ? L'input può essere convertito in un boolean ? |
|
C'è un altro gettone? |
|
C'è un'altra linea? |
7. Lettura dei dati da una stringa
Abbiamo detto in precedenza che la Scanner
classe 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' Scanner
oggetto, passiamo la stringa str
invece dell'oggetto System.in
. E ora l' scanner
oggetto leggerà i dati dalla stringa. Esempio:
Codice programma: | Spiegazione: |
---|---|
|
// un == 10;
// b == 20;
L'output dello schermo sarà: |
GO TO FULL VERSION