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

    problema do while... primi passi

    Salve, ho appena iniziato a studiare java, qualcuno può dirmi dove c'è un errore??
    Se inserisco un dato errato, come una lettera, il ciclo non termina ma continua all'infinito.

    //area cerchio con eccezioni e ciclo

    import java.util.Scanner;

    public class AreaCerchioEccezzioniCicloWhileDo {
    public static void main (String[]args){

    // area del cerchio = (raggio x raggio x 3.14)

    Scanner in = new Scanner (System.in);
    boolean errore = false;

    do {
    errore = false;

    try {
    System.out.print("Scrivi il raggio: ");
    int r = in.nextInt();
    double area = (double) (r*r*3.14);
    System.out.println("L'area del cerchio misura: "+ area);

    }

    catch (Exception e) {
    System.out.println("Valore errato, devi scrivere un numero");

    errore = true; }
    } while(errore == true);

    }
    }

    se si scrive un numero tutto ok
    se si scrive una lettera stampa: Valore errato.... Scrivi il raggio (all'infinito)
    Thanks

    Andrea

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

    Re: problema do while... primi passi

    Originariamente inviato da degliantoni
    Se inserisco un dato errato, come una lettera, il ciclo non termina ma continua all'infinito.
    Il "problema" è di Scanner ma è ben noto: se usi i next di Scanner che forniscono qualcosa diverso da String (int, altri primitivi ....), se l'input è malformato/errato Scanner lancia InputMismatchException ma il token errato rimane nel suo buffer interno.
    Se rifai nextInt .. idem, sei sempre sullo stesso token, stesso errore.
    Basta che "butti" via il token errato con un next() .

    P.S. ti conviene fattorizzare l'input di un int (con eventuale messaggio di prompt parametrabile) in un metodo apposito, invece di annegarlo nel resto della tua logica.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Allora l'errore sta nel fatto che andando in errore lo scanner sul nextInt ovviamente gli rimane in "memoria" l'ultimo dato inserito.
    Per ovviare a questo ti basta mettere nel catch "in.next()" in modo da far skippare il dato non valido.

  4. #4
    Aggiunto in.next (). Il ciclo cosi finisce.... ma per farlo ripetere??
    Grazie cmq x le risposte sopra elencate

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da degliantoni
    Aggiunto in.next (). Il ciclo cosi finisce.... ma per farlo ripetere??
    Grazie cmq x le risposte sopra elencate
    Posta (usando il tag code e un'indentazione leggibile) il nuovo codice. Dove lo hai aggiunto il next?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    L' ho aggiunto all i terno del catch

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Avevo fatto un esempio di metodo qui
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Ok. Grazie mille per le tempestive risposte

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.