Pagina 1 di 1

[java]eccezione sempre lanciata

Inviato: venerdì 29 febbraio 2008, 23:21
da misterxxitalia
ciao a tutti ho un metodo che mi lancia sempre un eccezione

Codice: Seleziona tutto

void aggiunginomintativo(){
String mionome,miocognome,miorecapito,miotelefono,miaaffinita;
boolean cicla = false;
    do {
      cicla = false;
try 
{

System.out.println("dammi il nome:");
     System.out.println("==>");
     mionome = leggiStringa();
setNome(mionome);  
     
System.out.println("dammi il cognome");
     System.out.println("==>");
     miocognome = leggiStringa();
       

System.out.println("dammi il recapito");
     System.out.println("==>");
     miorecapito = leggiStringa();
        

System.out.println("dammi il numero di telefono");
     System.out.println("==>");
     miotelefono = leggiStringa();
        

System.out.println("dammi il tipo di affinita; premi a per 'conoscente';b per 'amico';c per 'parente' d per 'amicone' e per 'amicissimo'");
System.out.println("==>");
 
    miaaffinita = leggiStringa();  
    String affinitascelta ="";  
    switch (miaaffinita.charAt(0)) {
case 'a':affinitascelta = "conoscente";
break;
case 'b':affinitascelta = "amico";
break;
case 'c':affinitascelta = "parente";
break;
case 'd':affinitascelta = "amicone";
break;
case 'e':affinitascelta = "amicissimo";
break;
default: cicla = true;
                                    }
                                    
System.out.println (affinitascelta);    
Rubrica x = new Rubrica (mionome,miocognome,miorecapito,miotelefono,miaaffinita);
if (nominativi.contains(x))System.out.println("cazz");
else nominativi.add(x);


}

     
     catch (IOException e) {
        System.out.println(e);
        cicla = true;
    }
     catch (StringIndexOutOfBoundsException e){
           System.out.println(e);
           cicla = true;
    }
    catch (InserimentoErratoException e){
           System.out.println(e);
           cicla = true;
    }



}
while ( cicla );
}

}

questa eccezione viene lanciata da quando ho messo il controllo per vedere se inserisco un nominativo uguale ovvero questo...

Codice: Seleziona tutto

Rubrica x = new Rubrica (mionome,miocognome,miorecapito,miotelefono,miaaffinita);
if (nominativi.contains(x))System.out.println("cazz");
else nominativi.add(x);

cosa sbaglio??grazie!!

Re: [java]eccezione sempre lanciata

Inviato: sabato 1 marzo 2008, 0:25
da urbo83
Quale delle tre eccezioni viene lanciata?

L'eccezione viene lanciata all'interno del metodo contains(x)? Prova a postare il contenuto di quel metodo.

Re: [java]eccezione sempre lanciata

Inviato: sabato 1 marzo 2008, 0:33
da Dottor P
Dicci quale eccezione viene lanciata.
Consiglio n°1: quel blocco try è troppo grosso....così ti è un po' difficile capire da dove può partire l'eccezione.
Consiglio n°2: considera la possibilità di strutturare meglio il codice (ad esempio suddividendolo in puù metodi). Qui lo stesso metodo si occupa di compiti che non hanno nulla a che fare l'uno con l'altro (ad esempio la lettura dei dati da tastiera e il tentativo di inserimento), il che è male

Re: [java]eccezione sempre lanciata

Inviato: sabato 1 marzo 2008, 14:24
da misterxxitalia
l'errore lanciato è InserimentoErratoException il metodo contains (metodo della classe vector)vede se all'interno del vettore è gia presente quell'elemento.appena sistemo questo errore l'interfaccia la trasporto all'esterno della classe (yes)sono sicuro che l'eccezione viene lanciata da qua...

Codice: Seleziona tutto

Rubrica x = new Rubrica (mionome,miocognome,miorecapito,miotelefono,miaaffinita);
if (nominativi.contains(x))System.out.println("cazz");
else nominativi.add(x);

Re: [java]eccezione sempre lanciata

Inviato: sabato 1 marzo 2008, 15:54
da daemon_nio
Ma chi lancia quell'eccezione?

Mi spiego.
Per lanciare quell'eccezione (creata da te) significa che hai un metodo che puoi richiamare e può lanciare l'eccezione:

Codice: Seleziona tutto

class nominativi
  {void inserisci() throws InserimentoErratoException
      {...//condizione anomala
        throw new(InserimentoErratoException);
        ...
       }
   }
   
Hai fatto qualcosa del genere? E' lì che c'è qualcosa che non va :P

Re: [java]eccezione sempre lanciata

Inviato: sabato 1 marzo 2008, 19:39
da misterxxitalia
avevi perfettamente ragione grazie!!infatti avevo questo metodo...

Codice: Seleziona tutto

public void setAffinita(String Affinita) throws InserimentoErratoException, IOException{
if (Affinita.length()<4|| Affinita.equals("")) throw new InserimentoErratoException();       
else  this.affinita = Affinita;
}
e quando vado a scegliere l'affinita io lo faccio tramite uno switch esempio...

Codice: Seleziona tutto

case 'a':affinitascelta = "conoscente";
break;
case 'b':affinitascelta = "amico";
break;
case 'c':affinitascelta = "parente";
break;
case 'd':affinitascelta = "amicone";
break;
case 'e':affinitascelta = "amicissimo";
e quindi essendo l'affinita con 1 solo carattere viene lanciata l'eccezione xo qui c'è il problema...io l'affinita la devo controllare che sia con queste possibilita ovvero posso scegliere solo tra queste scelte:parente, amicone, amicissimo, conoscente,non deve accettare nulla di diverso da questo.come modifico il controllo??se nn mi sono spiegato bene ditemelo che cerco di dirlo in altre parole povere!!

Re: [java]eccezione sempre lanciata

Inviato: domenica 2 marzo 2008, 0:59
da Massimo S.
Potresti usare gli Enum, vedi http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html
Nota che deve usare java5 (jdk 1.5) o superiore per usare gli Enum

Re: [java]eccezione sempre lanciata

Inviato: domenica 2 marzo 2008, 4:16
da Dottor P
Ancora meglio: puoi usare le Collezioni (che da Java 1.5 sono state migliorate con i Generics, in parole povere hai un controllo sui tipi inseriti a tempo di compilazione, poiché "ti costringi" ad azzeccargli dentro tutti oggetti dello stesso tipo). Hai sostanzialmente tre implementazioni "di base": List (lista) Set (insieme) e Map(mappa, o dizionario, coppie chiave-valore). Se nel tuo codice usi una lista (ArrayList o LinkedList) tra le altre cose non dovrai più preoccuparti di aumentare la dimensione della collezione quando serve, viene fatto automaticamente, il che significa che ci siamo tolti un bel dito

Re: [java]eccezione sempre lanciata

Inviato: domenica 2 marzo 2008, 12:08
da urbo83
misterxxitalia ha scritto: avevi perfettamente ragione grazie!!infatti avevo questo metodo...

Codice: Seleziona tutto

public void setAffinita(String Affinita) throws InserimentoErratoException, IOException{
if (Affinita.length()<4|| Affinita.equals("")) throw new InserimentoErratoException();       
else  this.affinita = Affinita;
}
e quando vado a scegliere l'affinita io lo faccio tramite uno switch esempio...

Codice: Seleziona tutto

case 'a':affinitascelta = "conoscente";
break;
case 'b':affinitascelta = "amico";
break;
case 'c':affinitascelta = "parente";
break;
case 'd':affinitascelta = "amicone";
break;
case 'e':affinitascelta = "amicissimo";
e quindi essendo l'affinita con 1 solo carattere viene lanciata l'eccezione xo qui c'è il problema...io l'affinita la devo controllare che sia con queste possibilita ovvero posso scegliere solo tra queste scelte:parente, amicone, amicissimo, conoscente,non deve accettare nulla di diverso da questo.come modifico il controllo??se nn mi sono spiegato bene ditemelo che cerco di dirlo in altre parole povere!!
Se Affinità è per forza di un solo carattere, perché controlli se ha meno di quattro caratteri e poi lanci l'eccezione?

Re: [java]eccezione sempre lanciata

Inviato: domenica 2 marzo 2008, 12:24
da misterxxitalia
si si urbo me ne sono accorto!!ragazzi nn posso usare ne java 6 ne java 5 per obbligo...altrimenti nn posso scrivere con una serie di OR se la parola immessa è diversa da quelle date viene lanciata l'eccezione??

Re: [java]eccezione sempre lanciata

Inviato: domenica 2 marzo 2008, 17:15
da urbo83
misterxxitalia ha scritto:altrimenti nn posso scrivere con una serie di OR se la parola immessa è diversa da quelle date viene lanciata l'eccezione??
Lo hai praticamente già pronto con l'istruzione default che viene eseguita quando la scelta è diversa dai casi precedenti:

Codice: Seleziona tutto

switch (miaaffinita.charAt(0)) {
case 'a':affinitascelta = "conoscente";
break;
case 'b':affinitascelta = "amico";
break;
case 'c':affinitascelta = "parente";
break;
case 'd':affinitascelta = "amicone";
break;
case 'e':affinitascelta = "amicissimo";
break;
default: cicla = true; throw new ExceptionCheVuoi();
}

Re: [java]eccezione sempre lanciata

Inviato: domenica 2 marzo 2008, 23:29
da misterxxitalia
si urbo pero ho il bisogno che il controllo ci sia qui...

Codice: Seleziona tutto

public void setAffinita(String Affinita) throws InserimentoErratoException, IOException{
if ...|| .... throw new InserimentoErratoException();       
else  this.affinita = Affinita;
}
l'affinita puo essere inserita anche da un file xml ecco il motivo!comunque domani cerchero di sistemare meglio il codice perche cosi è poco ordinato nn capisco in questo modo da dove viene lanciata l'eccezione!!

Re: [java]eccezione sempre lanciata

Inviato: lunedì 3 marzo 2008, 17:32
da Massimo S.
misterxxitalia ha scritto: l'affinita puo essere inserita anche da un file xml ecco il motivo!comunque domani cerchero di sistemare meglio il codice perche cosi è poco ordinato nn capisco in questo modo da dove viene lanciata l'eccezione!!
Per capire dove viene lanciata una eccezione devi stampare e analizzare il suo stack trace, vedi http://forum.ubuntu-it.org/viewtopic.php?p=1077751#p1077751