Lettura intero da tastiera

di il
2 risposte

Lettura intero da tastiera

Ciao ragazzi, sono davvero nuovo in ambito programmazione. Ho questo problema: devo leggere un intero da tastiera e intercetti l'errore nel caso in cui venfa inserito un valore non valido (stringa, caratteri che non siano interi).
Il codice (funzionante) che ho scritto è il seguente:

Scanner tast=new Scanner(System.in);
Integer valore=null;
System.out.println("inserisci un valore");
boolean ok=true;
while(ok) {
	try {
		valore=Integer.parseInt(tast.next());
		System.out.println(valore);
		}catch(Exception E) {
			System.out.println("inserici valore accettabile");
		}
	if(valore!=null) {
		ok=false;
	}
}
mentre, scrivendo questo codice qui, il sistema entra sempre nel blocco catch in un loop infinito nel caso in cui venga inserito una stringa e non un intero;

Scanner tast=new Scanner(System.in);
Integer valore=null;
System.out.println("inserisci un valore");
boolean ok=true;
while(ok) {
	try {
		valore=tast.nextInt();
		System.out.println(valore);
		}catch(Exception E) {
			System.out.println("inserici valore accettabile");
		}
	if(valore!=null) {
		ok=false;
	}
}
	}
	
La domanda è, perchè si genera un loop nel secondo caso? la logica mi porterebbe a pensare che anche il secondo codice dovrebbe funzionare. Chi mi sa aiutare? Grazie

2 Risposte

  • Re: Lettura intero da tastiera

    cmat ha scritto:


    La domanda è, perchè si genera un loop nel secondo caso?
    Perché il nextInt() di Scanner se l'input non è un int lancia eccezione ma NON "butta" via il token malformato. Spetterebbe a te farlo nel catch (tipicamente con un next() "a vuoto" senza usare il valore).

    È il comportamento standard by design e ben noto di Scanner (non è un baco o che altro). Funziona così.
  • Re: Lettura intero da tastiera

    Grazie mille andbin, chiarissimo, in pratica il valore inserito non viene buttato via ed ad ogni iterazione valore assume quello inserito generando l eccezione e così via. In ogni caso, è un metodo "solido e sicuro" quello che ho formulato?
Devi accedere o registrarti per scrivere nel forum
2 risposte