Ciclo do while (cestino)

di il
4 risposte

Ciclo do while (cestino)

Buongiorno a tutti,

in un ciclo do-while utilizzo un "cestino" per cattuare quel valore in più che vaga tra i circuiti quando si genera un errore. Nel mio caso, se inserisco un valore diverso da int, entro nel blocco catch ed elimino cio che ho inserito da tastiera:

import java.util.InputMismatchException;
import java.util.Scanner;

public class Esercizio004 {

	public static void main(String args[]){
		
		Scanner in = new Scanner(System.in);
		
		int numero = 0;
		int max = 0;

		String risposta = null;
		
		do {
			try {
				System.out.print("\nInserisci un numero intero: ");
				numero = in.nextInt();
				
				if (numero > max) {
					max = numero;
				}
		
			} catch (InputMismatchException e){
				System.out.print("\nHai inserito un valore errato!");
				
			}
			
			do {
				in.nextLine();   // <----CESTINO
				System.out.print("\nVuoi inserire un altro numero? (Y/N) ");
				risposta = in.nextLine().toUpperCase();
			} while (!risposta.equals("Y") && !risposta.equals("N"));
			
			
		} while (risposta.charAt(0) != 'N');
		System.out.printf("Il valore massimo inserito è: \"%d\"", max);
	}

}
Il problema è il seguente: dopo aver inserito il valore corretto il programma mi chiede: vuoi inserire un altro numero? Se rispondo Y o N funziona tutto alla perfezione ma se inserisco un valore diverso, il "cestino" mi mangia la risposta "sbagliata" e non mi fa riapparire immediatamente la domanda ...Y o N ?.

Mi date qualche suggerimento per cortesia?

Grazie

4 Risposte

  • Re: Ciclo do while (cestino)

    Se al nextInt() l'utente inserisce qualcosa che non è int, hai un InputMismatchException. La cosa innanzitutto da fare è "buttare" via quel token con next() (non nextLine!).
  • Re: Ciclo do while (cestino)

    andbin ha scritto:


    Se al nextInt() l'utente inserisce qualcosa che non è int, hai un InputMismatchException. La cosa innanzitutto da fare è "buttare" via quel token con next() (non nextLine!).
    Ciao Anbin e grazie innanzitutto per il tuo intervento. Ho provato a modificare il codice da nextLine() a next():

    
    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    public class Esercizio004 {
    
       public static void main(String args[]){
          
          Scanner in = new Scanner(System.in);
          
          int numero = 0;
          int max = 0;
    
          String risposta = null;
          
          do {
             try {
                System.out.print("\nInserisci un numero intero: ");
                numero = in.nextInt();
                
                if (numero > max) {
                   max = numero;
                }
          
             } catch (InputMismatchException e){
                System.out.print("\nHai inserito un valore errato!");
                
             }
             
             do {
                in.next();   // <----CESTINO
                System.out.print("\nVuoi inserire un altro numero? (Y/N) ");
                risposta = in.nextLine().toUpperCase();
             } while (!risposta.equals("Y") && !risposta.equals("N"));
             
             
          } while (risposta.charAt(0) != 'N');
          System.out.printf("Il valore massimo inserito è: \"%d\"", max);
       }
    
    }
    
    Cosi facendo però ho un problema quando inserisco un numero corretto: non mi appare la domanda: "Vuoi inserire un altro numero? (Y/N) "
  • Re: Ciclo do while (cestino)

    No, il next() che dicevo va nel catch!

    A quel punto che l'utente digiti
    123 invio
    oppure
    xyz invio

    Il token viene sempre "consumato" ma la sequenza di newline rimane da leggere.

    Quindi fai un nextLine() a vuoto e consumi il newline. (questo lo fai nel do interno ma non mi pare affatto buono)

    E a quel punto chiedi l'input per Y/N.
  • Re: Ciclo do while (cestino)

    Ora ci provo!! Grazie mille come sempre
Devi accedere o registrarti per scrivere nel forum
4 risposte