Ciclo semplice

di il
5 risposte

Ciclo semplice

Buongiorno a tutti, sono un novizio della programmazione e da poco sto imparando Java. mi stavo approcciando ad un esercizio molto semplice ma qualcosa mi sfugge.
Vorrei creare un programma il quale, finchè non inserisco il numero 6, il programma continua a chiedermi il numero. Questa parte sono riuscita a farla ma non riesco a gestire le eccezioni, ovvero, se catturo l'eccezione entro in un ciclo infinito. Come posso fare? Grazie mille anticipatamente.



public class MainProgram{

public static void main(String[]args) throws IOException {
Scanner tastiera= new Scanner(System.in);
int numero=0;
while(numero!=6){
try {System.out.println("inserisci il numero 6");
numero= tastiera.nextInt();
}
catch(InputMismatchException e){ System.out.println("non hai inserito un numero");

}
}
}}

5 Risposte

  • Re: Ciclo semplice

    sauzer90 ha scritto:


    non riesco a gestire le eccezioni, ovvero, se catturo l'eccezione entro in un ciclo infinito. Come posso fare?
    Questa è una questione ben nota di Scanner. Quando un nextXXX lancia InputMismatchException (perché l'input non è appropriato es. "aaa" o "12a" ad un nextInt), quel token NON viene rimosso. Resta lì in Scanner, perché potrebbe(/dovrebbe) essere magari letto in altro modo.

    Semplicemente nel catch ti basta "buttare" via il token sballato facendo sullo Scanner un next() "a vuoto" (cioè senza considerare ciò che ritorna).
  • Re: Ciclo semplice

    andbin ha scritto:


    sauzer90 ha scritto:


    non riesco a gestire le eccezioni, ovvero, se catturo l'eccezione entro in un ciclo infinito. Come posso fare?
    Questa è una questione ben nota di Scanner. Quando un nextXXX lancia InputMismatchException (perché l'input non è appropriato es. "aaa" o "12a" ad un nextInt), quel token NON viene rimosso. Resta lì in Scanner, perché potrebbe(/dovrebbe) essere magari letto in altro modo.

    Semplicemente nel catch ti basta "buttare" via il token sballato facendo sullo Scanner un next() "a vuoto" (cioè senza considerare ciò che ritorna).
    Ciao Andrea! innanzitutto grazie davvero per la risposta, purtroppo non ho ben compreso ciò che mi hai detto, se tu potessi farmi un esempio con il codice (in maniera molto sintetica ...non pretendo di più), forse potrei capire meglio.
  • Re: Ciclo semplice

    sauzer90 ha scritto:


    purtroppo non ho ben compreso ciò che mi hai detto
    In quel tuo catch devi semplicemente inserire un tastiera.next(); (poi chiaramente puoi benissimo stampare l'errore).
  • Re: Ciclo semplice

    andbin ha scritto:


    sauzer90 ha scritto:


    purtroppo non ho ben compreso ciò che mi hai detto
    In quel tuo catch devi semplicemente inserire un tastiera.next(); (poi chiaramente puoi benissimo stampare l'errore).
    funziona!!!! ma come mai questa cosa? se puoi spiegarmelo brevemente.
    Grazie mille, sono nuovo di questo forum non so se c'è un modo per quotarti ..
  • Re: Ciclo semplice

    sauzer90 ha scritto:


    ma come mai questa cosa? se puoi spiegarmelo brevemente.
    L'ho spiegata prima ....
Devi accedere o registrarti per scrivere nel forum
5 risposte