Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    88

    Eccezioni try-catch

    Salve non riesco a capire perchè quando provo a sollevare l'eccezione ho un errore in questa parte di codice

    codice:
     try{
                           System.out.println("Quale carta vuoi giocare?");
                           scelta=scanner.nextInt();
                           while (scelta<1 || scelta>3){ 
                                     System.out.println("ERRORE DIGITA NUMERO CORRETTO");
                                     System.out.println("Quale carta vuoi giocare?");
                                     scelta=scanner.nextInt();
                              }
                          }catch (Exception exc){
                               System.out.println("Bisogna inserire un numero");
                           }
    con questo output

    Quale carta vuoi giocare?
    l
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    Bisogna inserire un numero
    at briscola.MazzoDiCarte.mano(MazzoDiCarte.java:198)
    at briscola.Briscola.main(Briscola.java:19)
    Java Result: 1

    Sapreste spiegarmi dove sbaglio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Eccezioni try-catch

    Originariamente inviato da j_ax31
    Salve non riesco a capire perchè quando provo a sollevare l'eccezione ho un errore in questa parte di codice

    codice:
     try{
                           System.out.println("Quale carta vuoi giocare?");
                           scelta=scanner.nextInt();
                           while (scelta<1 || scelta>3){ 
                                     System.out.println("ERRORE DIGITA NUMERO CORRETTO");
                                     System.out.println("Quale carta vuoi giocare?");
                                     scelta=scanner.nextInt();
                              }
                          }catch (Exception exc){
                               System.out.println("Bisogna inserire un numero");
                           }
    con questo output

    Quale carta vuoi giocare?
    l
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    Bisogna inserire un numero
    at briscola.MazzoDiCarte.mano(MazzoDiCarte.java:198)
    at briscola.Briscola.main(Briscola.java:19)
    Java Result: 1

    Sapreste spiegarmi dove sbaglio?
    Intanto in quel codice stai provando a catturarla non a sollevarla tu stesso, o almeno non direttamente...

    Detto questo, in quella parte di codice non vedo nulla che possa sollevare un'ArrayIndexOutOfBoundsException. Dalla trace leggo che il tuo sorgente è ben più lungo di quella porzione di codice, sicuro che sia una di quelle la riga 198?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    88
    codice:
     public void mano(){
                           Scanner scanner=new Scanner(System.in);
                           int scelta=0,
                               next=4,
                               contamano=1,
                               s=0;
                           
                           while(contamano<21){
                           System.out.println("Mano "+(contamano));
                           System.out.println();
                           
                           if(contamano<18 || contamano==18){
                               
                           System.out.println("Il pc tira:"+ pc.toString());
                           System.out.println();
                           System.out.println("La Briscola è:"+ briscola.toString());
                           System.out.println();
                           System.out.println("Le tue carte:");
                           System.out.println();
                           for(int i=0;i<3;i++){
                                              System.out.println((i+1)+player[i].toString());
                           }
                           System.out.println();
                           }
                           
       
                           
                           
                           if(contamano>18){
                               System.out.println("Il pc tira:"+ pc.toString());
                               System.out.println();
                               player[s]=null;
                               System.out.println("Le tue carte:");
                               System.out.println();
                               for(int i=0;i<3;i++){
                                              if(player[i]!=null)
                                              System.out.println((i+1)+player[i].toString());
                           }
                           }
                           
                           
                           try{
                           System.out.println("Quale carta vuoi giocare?");
                           scelta=scanner.nextInt();
                           while (scelta<1 || scelta>3){ 
                                     System.out.println("ERRORE DIGITA NUMERO CORRETTO");
                                     System.out.println("Quale carta vuoi giocare?");
                                     scelta=scanner.nextInt();
                              }
                          }catch (Exception exc){
                               System.out.println(exc);
                               System.out.println("Bisogna inserire un numero");
                           }
                          
                           s=scelta;
                           switch(scelta){
                               case 1:
                                   regola.Condizioni( pc.getValore(),
                                                      player[scelta-1].getValore(),
                                                      briscola.getValore(),
                                                      pc.getSeme(),
                                                      player[scelta-1].getSeme(),
                                                      briscola.getSeme());
                                   System.out.println("Score pc:"+regola.getScorePC());
                                   System.out.println("Score player:"+regola.getScorePlayer());
                                   System.out.println();
                                  break;
                               case 2:
                                   regola.Condizioni( pc.getValore(),
                                                      player[scelta-1].getValore(),
                                                      briscola.getValore(),
                                                      pc.getSeme(),
                                                      player[scelta-1].getSeme(),
                                                      briscola.getSeme());
                                   System.out.println("Score pc:"+regola.getScorePC());
                                   System.out.println("Score player:"+regola.getScorePlayer());
                                   System.out.println();
                                  break;
                               case 3:
                                   regola.Condizioni( pc.getValore(),
                                                      player[scelta-1].getValore(),
                                                      briscola.getValore(),
                                                      pc.getSeme(),
                                                      player[scelta-1].getSeme(),
                                                      briscola.getSeme());
                                   System.out.println("Score pc:"+regola.getScorePC());
                                   System.out.println("Score player:"+regola.getScorePlayer());
                                   System.out.println();
                                  break;
                           }
                           s--;
                           next++;
                           player[s]=mazzo[next];   //riga 198
                           pc=mazzo[next+2];
                           contamano++;
                           if(contamano==20)
                               pc=briscola;
                     }         
                    
                  }
    
    
    }
    questo è il metodo completo e la riga 198 è quella commentata in fondo ma se tolgo il try - catch non da errore

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da j_ax31
    codice:
     public void mano(){
                           Scanner scanner=new Scanner(System.in);
                           int scelta=0,
                               next=4,
                               contamano=1,
                               s=0;
                           
                           while(contamano<21){
                           System.out.println("Mano "+(contamano));
                           System.out.println();
                           
                           if(contamano<18 || contamano==18){
                               
                           System.out.println("Il pc tira:"+ pc.toString());
                           System.out.println();
                           System.out.println("La Briscola è:"+ briscola.toString());
                           System.out.println();
                           System.out.println("Le tue carte:");
                           System.out.println();
                           for(int i=0;i<3;i++){
                                              System.out.println((i+1)+player[i].toString());
                           }
                           System.out.println();
                           }
                           
       
                           
                           
                           if(contamano>18){
                               System.out.println("Il pc tira:"+ pc.toString());
                               System.out.println();
                               player[s]=null;
                               System.out.println("Le tue carte:");
                               System.out.println();
                               for(int i=0;i<3;i++){
                                              if(player[i]!=null)
                                              System.out.println((i+1)+player[i].toString());
                           }
                           }
                           
                           
                           try{
                           System.out.println("Quale carta vuoi giocare?");
                           scelta=scanner.nextInt();
                           while (scelta<1 || scelta>3){ 
                                     System.out.println("ERRORE DIGITA NUMERO CORRETTO");
                                     System.out.println("Quale carta vuoi giocare?");
                                     scelta=scanner.nextInt();
                              }
                          }catch (Exception exc){
                               System.out.println(exc);
                               System.out.println("Bisogna inserire un numero");
                           }
                          
                           s=scelta;
                           switch(scelta){
                               case 1:
                                   regola.Condizioni( pc.getValore(),
                                                      player[scelta-1].getValore(),
                                                      briscola.getValore(),
                                                      pc.getSeme(),
                                                      player[scelta-1].getSeme(),
                                                      briscola.getSeme());
                                   System.out.println("Score pc:"+regola.getScorePC());
                                   System.out.println("Score player:"+regola.getScorePlayer());
                                   System.out.println();
                                  break;
                               case 2:
                                   regola.Condizioni( pc.getValore(),
                                                      player[scelta-1].getValore(),
                                                      briscola.getValore(),
                                                      pc.getSeme(),
                                                      player[scelta-1].getSeme(),
                                                      briscola.getSeme());
                                   System.out.println("Score pc:"+regola.getScorePC());
                                   System.out.println("Score player:"+regola.getScorePlayer());
                                   System.out.println();
                                  break;
                               case 3:
                                   regola.Condizioni( pc.getValore(),
                                                      player[scelta-1].getValore(),
                                                      briscola.getValore(),
                                                      pc.getSeme(),
                                                      player[scelta-1].getSeme(),
                                                      briscola.getSeme());
                                   System.out.println("Score pc:"+regola.getScorePC());
                                   System.out.println("Score player:"+regola.getScorePlayer());
                                   System.out.println();
                                  break;
                           }
                           s--;
                           next++;
                           player[s]=mazzo[next];   //riga 198
                           pc=mazzo[next+2];
                           contamano++;
                           if(contamano==20)
                               pc=briscola;
                     }         
                    
                  }
    
    
    }
    questo è il metodo completo e la riga 198 è quella commentata in fondo ma se tolgo il try - catch non da errore
    L'errore mi sembra molto chiaro, in quella riga stai accedendo alla cella di indice -1, che ovviamente non esiste, quindi s, oppure next, o anche entrambe hanno valore -1 a quel punto del codice. Metti una stampa e scoprilo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    beh hai letto la teoria delle eccezioni a metà

    codice:
    try{
                           System.out.println("Quale carta vuoi giocare?");
                           scelta=scanner.nextInt();
                           if (scelta > 5) 
    throw new Exception("Insert a number"); 
                          }catch (Exception exc){
      System.out.println(exc.getMessage()); 
                           }
    questo solleva un'eccezione
    RTFM Read That F*** Manual!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    88
    Anche provando la tua soluzione da lo stesso errore e poi a me principalmente serve l'eccezione nel caso venga inserito un char e poi che il numero deve essere compreso tra 1 e 3...

    Kamoos ma senza cercare di catturare le eccezioni questo errore non esiste...

  7. #7
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62
    ciao, volevo solo confermare quello che gli altri anno scritto infatti l'eccezzione che ti si genera è data quando cerchi di accedere ad un parte dell'arrey che non esisiste tramite indice nel tuo caso l'indice viene decrementato e quando cerca dinuovo l'accesso lancia l'eccezione!
    Per quanto riguarda lanciare un eccezione si lancia con "throw new Exception" e all'inizio del metodo devi mettere "throws Exception" il try-catch si usa solo per catturare le eccezioni che vengono laciate dal metodo esempio in pseudo codice:

    codice:
    //quando usi il metodo che da l'eccezione
    try{
       pippo();
    ..altri metodi che magari generano eccezzioni
    }catch(EccezioneTua e){
    e.metodoTuo();
    }catch(AltreEccezzioni e){quello che vuoi fare quando vengo generate}
    finally {operazioni da fare alla fine comunque vada}
    
    
    //il metodo pippo
    public void pippo() thows EccezzioneTua{
     ....vari procedimeti....
    if(comportamentoVoluto){
    ....fa quello che deve fare.....
    }else{
    throw new EccezzioneTua();
    }
    
    }
    spero di essere stato di aiuto

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da j_ax31
    Anche provando la tua soluzione da lo stesso errore e poi a me principalmente serve l'eccezione nel caso venga inserito un char e poi che il numero deve essere compreso tra 1 e 3...

    Kamoos ma senza cercare di catturare le eccezioni questo errore non esiste...
    Credo che il codice di valia fosse per sottolineare la differenza fra catturare e sollevare un'eccezione...

    Comunque j_ax31, non c'è niente di complicato, stampa a console i due valori che in quella riga usi come indici e scopri quale dei due vale -1, quindi aggiusta di conseguenze il tuo codice. Non capisco il problema che ti poni, se pensi che il resto del tuo codice sia più o meno giusto guarda quale di quelle due variabili assume un valore errato e controlla tutte le operazioni che fai precedentemente su di essa.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    88
    stampando non mi risulta nulla a -1 infatti l'output è

    Mano 1

    S=0
    NEXT=4

    come è giusto che debbano essere... non capisco

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da j_ax31
    stampando non mi risulta nulla a -1 infatti l'output è

    Mano 1

    S=0
    NEXT=4

    come è giusto che debbano essere... non capisco
    Hai messo le stampe appena prima o appena dopo la riga incriminata, senza altre istruzioni di mezzo?

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.