Il metodo nextInt() fa due cose:
1) Se nel buffer di input esiste già un valore numerico, lo restituisce e lo toglie dal buffer
2) Se nel buffer di input non è presente un valore numerico, si mette in attesa dell'inserimento.
Quindi, ogni volta che chiami nextInt() stai chiedendo all'utente di inserire un nuovo valore.
Generalmente l'I/O va fatto seguendo un filo logico.
1) Chiedo un valore all'utente e memorizzo tale valore in una variabile
2) Solo DOPO la memorizzazione nella variabile, vado a fare tutte le considerazioni del caso (usando la variabile!)
3) Se le valutazioni hanno dato esito negativo, ripeto la richiesta di inserimento e memorizzazione dati.
Uno schema abbozzato potrebbe essere il seguente:
codice:
int valore = -1; // Un valore che so già non mi va bene, ma lo uso per inizializzazione
while(valore < 0) {
// Chiedo il valore all'utente
System.out.println("Inserisci il valore:");
// Leggo il valore da input
valore = scrivi.nextInt();
// Eventuali altre considerazioni sul valore (esempio, deve essere compreso fra un minimo ed un massimo, ecc)
...
}
// Se sono arrivato qui, significa che l'utente ha inserito un valore maggiore di 0
... // procedo con il resto del programma, usando "valore" e non più "nextInt()" (che farebbe un'altra lettura da input)
Ciao.