- Comprendere il concetto di validazione dell’input
- Utilizzare i metodi hasNextInt() e hasNextDouble()
- Gestire input errati evitando errori di esecuzione
- Costruire programmi robusti e interattivi
- Applicare cicli per il controllo dell’input
Validazione dell’input numerico in Java
Quando un programma riceve dati dall’utente, non può dare per scontato che siano corretti. La validazione dell’input serve a controllare i dati prima di utilizzarli, evitando errori e comportamenti imprevisti.
Problema senza validazione
Se l’utente inserisce un valore non numerico, il programma genera un errore di esecuzione (InputMismatchException).
Scanner input = new Scanner(System.in);
System.out.print("Inserisci un numero: ");
int n = input.nextInt(); // rischio errore
Soluzione: controllo con hasNextInt()
Il metodo hasNextInt() verifica se il valore inserito è un numero intero valido prima della lettura.
Scanner input = new Scanner(System.in);
System.out.print("Inserisci un numero intero: ");
if(input.hasNextInt()){
int n = input.nextInt();
System.out.println("Valore valido: " + n);
} else {
System.out.println("Errore: valore non numerico");
}
Validazione con ciclo (approccio robusto)
Per garantire un input corretto si utilizza un ciclo che richiede nuovamente il valore fino a quando non è valido.
Scanner input = new Scanner(System.in);
int n;
System.out.print("Inserisci un numero intero: ");
while(!input.hasNextInt()){
System.out.println("Errore: inserire un numero intero valido");
input.next(); // scarta input errato
}
n = input.nextInt();
System.out.println("Numero accettato: " + n);
Validazione dei numeri decimali
Per i numeri decimali si utilizza hasNextDouble().
System.out.print("Inserisci un numero decimale: ");
while(!input.hasNextDouble()){
System.out.println("Errore: inserire un numero decimale valido");
input.next();
}
double valore = input.nextDouble();
System.out.println("Valore accettato: " + valore);
Tabella dei principali controlli
| Metodo | Controllo | Tipo |
|---|---|---|
| hasNextInt() | Numero intero | int |
| hasNextDouble() | Numero decimale | double |
| hasNext() | Token generico | String |
| hasNextLine() | Intera riga | String |
Concetto chiave
- Scanner legge i dati
- hasNext controlla i dati prima della lettura
- Il ciclo garantisce input valido
- Il programma diventa robusto e stabile
LABORATORIO
Validazione dell’input numerico
Costruzione di programmi robusti con controllo degli errori
- Browser
- onlinegdb.com
1 Input sicuro (intero)
Creare un programma che richiede un numero intero e continua a chiederlo finché non è valido.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n;
System.out.print("Inserisci un numero intero: ");
while(!input.hasNextInt()){
System.out.println("Valore non valido, riprova:");
input.next();
}
n = input.nextInt();
System.out.println("Numero valido: " + n);
input.close();
}
}
2 Input sicuro (decimale)
Adattare il programma per i numeri decimali.
while(!input.hasNextDouble()){
System.out.println("Errore: inserire un numero decimale");
input.next();
}
double valore = input.nextDouble();
3 Applicazione reale
Simulare un sistema di acquisto con controlli:
- Prezzo (double valido)
- Quantità (int valido)
- Calcolo totale
double totale = prezzo * quantita;
4 Esercizio avanzato
- Creare un menu numerico
- Validare la scelta dell’utente
- Ripetere fino a scelta corretta