Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [Java] Eccezioni

  1. #1

    [Java] Eccezioni

    Salve a tutti,
    sto cercando di completare un esercizio proposto sul mio libro di programmazione:
    devo scrivere un programmino che richiede di inserire una stringa di testo, se è composta da massimo 20 caratteri è tutto ok, conta i caratteri e tanti saluti... ma se invece ci sono meno di 20 caratteri lancia un'eccezione (creata da me) e insiste nel richiedere una stringa più corta.
    Vi metto quello che ho scritto (che è funzionante) ma non è quello che volevo.
    codice:
    public class MexLungo {
       public static void main( String[] args ) {
          System.out.println( "Scrivi un testo di massimo 20 caratteri." );
          String s = SavitchIn.readLine();
          try {
             if( s.length() > 20 )
                throw new MessaggioTroppoLungoException();
             } catch( MessaggioTroppoLungoException e ) {
                s = ritenta();
             }
             System.out.println( "Hai inserito " + s.length() + " caratteri." );
          }
    
       public static String ritenta()  {
          System.out.print( "Ritenta con un messaggio più corto.\n> " );
          String s = SavitchIn.readLine();
          if( s.length() > 20 )
             return ritenta();
          else
             return s;
       }
    }
    
    class MessaggioTroppoLungoException extends Exception {
       public MessaggioTroppoLungoException() {
           super( "Messaggio troppo lungo" );
          }
          public MessaggioTroppoLungoException( String s ) {
             super( s );
          }
    }
    quello che davvero volevo era beccare l'eccezione anche nel metodo 'ritenta()', ma non so come fare... qualche dritta?
    Nel senso che non posso usare l'intestazione tipo:
    public static String ritenta() throws eccezione
    perchè la dovrei beccare dal main ancora con try-catch e mi ritroverei esattamente nella situazione di prima, no?

  2. #2
    nella mia ignoranza da studente non avanzato, mettere un flag e tornare al flag nel catch?

  3. #3
    Quote Originariamente inviata da DarkPassenger Visualizza il messaggio
    nella mia ignoranza da studente non avanzato, mettere un flag e tornare al flag nel catch?
    Scusa ma non capisco che intendi, un goto?

  4. #4
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Non puoi mettere un altro try-catch nel metodo ritenta?

  5. #5
    codice:
    public static void main(String[] args)
        {
            System.out.println("Scrivi un testo di massimo 20 caratteri.");
            String s = SavitchIn.readLine();
    
            while(!check(s))
            {
                System.out.println("Hai scritto un testo troppo lungo");
                s = SavitchIn.readLine();
            }
            
            System.out.println("Hai inserito " + s.length() + " caratteri.");
        }
        
        private static boolean check(String s)
        {
            return s.length() < 20;
        }
    ?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Sì ma probabilmente voleva utilizzare il try-catch e la gestione delle eccezioni.

  7. #7
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Ciao, questa parte di codice non ha molto senso:
    codice:
    try {
             if( s.length() > 20 )
                throw new MessaggioTroppoLungoException();
             } catch( MessaggioTroppoLungoException e ) {
                s = ritenta();
             }
             System.out.println( "Hai inserito " + s.length() + " caratteri." );
          }
    In pratica lanci un eccezione che subito dopo intercetti. Se sai già quando lanciare l'eccezione e come gestirla allora puoi del tutto evitare di scomodare il sistema della gestione delle eccezioni.
    Io creerei un metodo che lancia un eccezione se la lunghezza del messaggio è troppo lunga e nel main continuerei a richiamarla finche non la lancia più.
    Esempio non testato:
    codice:
    import java.util.Scanner;
    
    public class MexLungo {
        public static void main(String[] args) {
    
            System.out.println("Scrivi un testo di massimo 20 caratteri.");
            boolean error;
            String message = null;
            do {
                error = false;
                try {
                    message = inserisci();
                } catch (MessaggioTroppoLungoException ex) {
                    System.out.println(ex.getMessage());
                    error = true;
                }
            } while (error);
    
            System.out.println("Hai inserito " + message.length() + " caratteri.");
        }
    
        public static String inserisci() throws MessaggioTroppoLungoException {
            Scanner in = new Scanner(System.in);
            String s = in.next();
            if (s.length() > 20)
                throw new MessaggioTroppoLungoException();
            return s;
        }
    }
    
    class MessaggioTroppoLungoException extends Exception {
        public MessaggioTroppoLungoException() {
            super("Messaggio troppo lungo");
        }
    
        public MessaggioTroppoLungoException(String s) {
            super(s);
        }
    }
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

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.