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