Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Errore Try/Catch

    Ciao a tutti,
    Vi posto direttamente il codice:
    codice:
              
    while (controllo==false)
    		{	
    					
    			try	{int puntata=in.nextInt();controllo=true;}
    			catch(InputMismatchException e)
    			{
    				System.out.println("Errore!");
    				controllo=false;
    			}
    		}
    Quando non viene generata l'eccezione, tutto funziona correttamente, ma in caso contrario va in loop e la stringa "Errore!" viene generata all'infinito. Per quale motivo il blocco try non viene ripetuto? Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Errore Try/Catch

    Originariamente inviato da shika92
    Quando non viene generata l'eccezione, tutto funziona correttamente, ma in caso contrario va in loop e la stringa "Errore!" viene generata all'infinito. Per quale motivo il blocco try non viene ripetuto?
    Il blocco try viene ripetuto! Ma se ti aspetti un int (nextInt) e inserisci es. "abc12", ottieni InputMismatchException ma questo token non viene rimosso e quindi nel tuo ciclo il nextInt() fallisce all'infinito.
    Semplicemente "butta" via il token errato con un next().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ho provato con in.next(); e funziona! Grazie!

    Quindi, per avere chiare le idee, l'input rimane memorizzato finché non elimino il token con next()?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da shika92
    Quindi, per avere chiare le idee, l'input rimane memorizzato finché non elimino il token con next()?
    Se uno dei nextXyz() di Scanner lancia InputMismatchException, vuol dire che il token non è nel formato che il metodo si aspetta (e quindi non può convertire il token nel tipo da restituire, es. int, double, BigInteger).
    Ma questo token errato resta disponibile per Scanner (non viene rimosso) e quindi un ciclo inappropriato farebbe rifallire continuamente quel metodo.

    È compito del programmatore invocare qualcosa per rimuoverlo, ad esempio next() che tratta un qualunque token arbitrario. Poi che il token lo "butti" via (non lo usi) oppure ad esempio lo usi per dire all'utente: "Errore, hai scritto '.....' !" o per altro, beh, è assolutamente una tua scelta.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ok, grazie per i chiarimenti!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.