Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: problema try-catch

Hybrid View

  1. #1

    problema try-catch

    ho fatto il seguente codice e vorrei estrarre numeri casuali ma al momento non conosco il comando per la casualità quindi ho fatto così.

    public class EstrazioneNumeri {
    private int numeriDisponibili;
    public EstrazioneNumeri() {
    numeriDisponibili = 10;

    }
    public void estrai() throws EstrazioneException{
    if( numeriDisponibili == 10) {
    throw new EstrazioneException();
    }
    numeriDisponibili++;
    }

    }
    -------------------------
    public class EstrazioneException extends Exception {
    public EstrazioneException() {
    super("Problema con l'estrazione");
    try {
    int numeriDisponibili;
    if(numeriDisponibili == 10) {
    throw new EstrazioneException();
    }
    numeriDisponibili++;
    }
    catch (EstrazioneException exc){ // qui mi dice di insserire } ma non riesco a capire dove... se la metto alla fine mi dà altri errori...
    System.out.println(exc.toString());
    }
    public String toString() {
    return getMessage()+": numeri esauriti!!!";
    }
    }
    ------------------


    public class GestoreEstrazione {

    public static void main(String[] args) {
    EstrazioneNumeri estrazione = new EstrazioneNumeri();
    try{
    for (int i = 1; i <= 10; ++i) {
    estrazione.estrai();
    System.out.println("Estratto numero: "+i);
    }
    }catch (EstrazioneException exc) {
    System.out.println(exc.toString());
    }
    }

    }

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Scusa ma perché non usi direttamente la classe Random?

  3. #3
    Potrebbe funzionare anche il metodo
    codice:
    Math.random()
    che se non sbaglio ti restituisce un valore casuale da 0 a 1.

    Ad ogni modo:
    Quote Originariamente inviata da francesco51
    try {
    int numeriDisponibili;
    if(numeriDisponibili == 10) {
    throw new EstrazioneException();
    }
    numeriDisponibili++;
    }
    catch (EstrazioneException exc){// qui mi dice di insserire } ma non riesco a capire dove... se la metto alla fine mi dà altri errori...
    System.out.println(exc.toString());
    La chiamata System.out.println(exc.toString()) dovrebbe stare nel blocco catch.
    Ultima modifica di CaMpIoN; 02-12-2014 a 16:31
    Forza Napoli!

  4. #4
    io ho scritto che non conosco il comando per la casualità ancora...cmq math.random() però resta il fatto che mi manca una parentesi } che non so dove và piazzata..non riesco a capirlo...

  5. #5
    ok, grazie..questo è risolto...il try-catch in sè è per sè l'ho cpt..la difficoltà la incontro proprio qui, nelle eccezioni personalizzate... quale è la differenza?

  6. #6
    qualcosa nel codice non funziona in questa classe:

    public class EstrazioneException extends Exception {
    public EstrazioneException() {
    super("Problema con l'estrazione");
    try {
    int numeriDisponibili;
    if(numeriDisponibili == 10) {
    throw new EstrazioneException();
    }
    numeriDisponibili++;
    }
    catch (EstrazioneException exc){ // qui mi dice di insserire } ma non riesco a capire dove... se la metto alla fine mi dà altri errori...
    System.out.println(exc.toString());
    }
    public String toString() {
    return getMessage()+": numeri esauriti!!!";
    }
    }
    Se aggiungo la parentesi qui poi ho altri errori sul public String toString().....

  7. #7
    1) Togli il modificatore di visualizzazione alle altre classi che non contengono il main. Nota: il nome del file deve essere lo stesso della classe che contiene il main, dichiarata con modificatore di visualizzazione.
    2) Non chiudi il costruttore EstrazioneException(). Apri il suo blocco, ma non lo chiudi, è la che manca la }. Mettila subito dopo il blocco catch, prima del metodo toString.
    3) Se non lo fai, ti consiglio di utilizzare un IDE come Eclipse o NetBeans (dicono che quest'ultimo sia più facile).

    Immagino tu voglia scrivere
    codice:
    int numeriDisponibili = (int) (Math.random()*11);
    Ultima modifica di CaMpIoN; 02-12-2014 a 16:59
    Forza Napoli!

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    1. quando apri una parentesi, chiudila subito e posizionati col cursore in mezzo, poi vai a capo: hai appena creato lo spazio per scrivere, torna su di una riga e procedi come sempre
    2. usare le indentazioni aiuta a capire dove ti scordi qualcosa
    3. secondo te, se esplicitamente dichiaro una classe che estende Exception (quindi parlo di una eccezione custom) cosa intendo fare?
    In pratica è una situazione in cui un particolare tipo di evento (che definisco io) si verifica e voglio che venga trattato in maniera diversa da altri.
    Es. IOException è una eccezione riguardante l'IO, sicuramente voglio trattarla in modo diverso da Exception generica
    RTFM Read That F*** Manual!!!

  9. #9
    se dichiaro una classe che estende exception serve per lanciare una eccezione giusto? e poi quella eccezione attraverso il throw new.... viene lanciata nella stessa classe o in un'altra.arrivato all' 11esimo numero il numero non me lo scrive e mi riporta problema con l'estrazione: numeri terminati. questo perchè ho scritto:
    try {
    int numeriDisponibili = (int) (Math.random()*11);
    if(numeriDisponibili == 11) {
    throw new EstrazioneException();

    è proprio quel throw new EstrazioneException che mi fà comparire quella scritta?

    catch (EstrazioneException exc){
    System.out.println(exc.toString())

    è l'eccezione, quel sytem.out.println(exc.toString()) mi deve resituire una stringa dico bene? in questo caso mi restituisce il loop dei numeri dico bene?

  10. #10
    In realtà non sono bravo nel campo, potrei però dirti che ce differenza funzionale.
    Il try-catch è proprio la gestione dell'eccezione, il blocco try si ferma quando viene lanciata un'eccezione e vengono poi controllati i blocchi catch in base all'eccezione lanciata.
    Un'eccezione lanciata è proprio una classe che estende la classe Throwable. Ti faccio un esempio:
    Mettiamo caso io voglia calcolare la divisione di due numeri e gestire il problema del fatto che il denominatore non può essere uguale a zero.
    Allora mi servirà un'eccezione, una classe che estende Throwable, che informa del problema:
    codice:
    class Eccezione extends Throwable {
    
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        public Eccezione() {
            System.err.println("Il denominatore non può essere uguale a zero.");
        }
    }
    A questo punto nel metodo che effettua la divisione tra due numeri, devo definire che può lanciare un'eccezione del tipo Eccezione e lanciare un istanza di Eccezione, quando il denominatore della frazione è proprio uguale a zero.
    Il metodo può essere questo:
    codice:
    public static double divisione(int num, int den) throws Eccezione {
        if (den==0) {
            throw new Eccezione();
        } else {
            return num/den;
        }
    }
    Come vedi l'eccezione lanciata è un'istanza della classe Eccezione. A questo punto nel metodo main posso fare questo:
    codice:
    public static void main(String[] args) {
        s = new Scanner(System.in);
        System.out.print("Inserisci il numeratore: ");
        int num = s.nextInt();
        System.out.println();
        System.out.print("Inserisci il denominatore: ");
        int den = s.nextInt();
        System.out.println();
        try {
            System.out.println("Il risultato è: "+divisione(num,den));
        } catch (Eccezione e) {
            System.out.println("L'eccezione è dichiarata e gestita.");
        }
    }
    Ti ho mostrato essenzialmente come creare un'eccezione, però altro non so riguardo a queste quindi se vuoi sapere di più ti consiglio di leggerti un tutorial completo o aspettare qualcuno più bravo di me sul forum.

    Ah la classe che estende Throwable eredita da essa il metodo printStackTrace() che mostra il solito messaggio di eccezione, in genere che mostra dove è stata lanciata l'eccezione nel codice. Il costruttore con il metodo di stampa è solo un'aggiunta che ho messo per farti vedere che l'eccezione è una classe qualsiasi.
    Ultima modifica di CaMpIoN; 02-12-2014 a 17:43
    Forza Napoli!

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.