[java]eccezione sempre lanciata

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

[java]eccezione sempre lanciata

Messaggio 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!!
Avatar utente
urbo83
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: giovedì 21 aprile 2005, 14:59
Desktop: GNOME 3.10
Distribuzione: ArchLinux x86_64
Località: Cesena (FC)
Contatti:

Re: [java]eccezione sempre lanciata

Messaggio 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.
Avatar utente
Dottor P
Prode Principiante
Messaggi: 28
Iscrizione: mercoledì 6 settembre 2006, 17:52

Re: [java]eccezione sempre lanciata

Messaggio 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
Ultima modifica di Dottor P il sabato 1 marzo 2008, 0:37, modificato 1 volta in totale.
Immagine
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]eccezione sempre lanciata

Messaggio 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);
Avatar utente
daemon_nio
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1012
Iscrizione: lunedì 15 gennaio 2007, 14:18
Sesso: Maschile
Località: London
Contatti:

Re: [java]eccezione sempre lanciata

Messaggio 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
Sempre costruendo qualcosa di nuovo: Matag: The Game
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]eccezione sempre lanciata

Messaggio 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!!
Avatar utente
Massimo S.
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1931
Iscrizione: giovedì 28 settembre 2006, 14:34

Re: [java]eccezione sempre lanciata

Messaggio 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
Avatar utente
Dottor P
Prode Principiante
Messaggi: 28
Iscrizione: mercoledì 6 settembre 2006, 17:52

Re: [java]eccezione sempre lanciata

Messaggio 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
Immagine
Avatar utente
urbo83
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: giovedì 21 aprile 2005, 14:59
Desktop: GNOME 3.10
Distribuzione: ArchLinux x86_64
Località: Cesena (FC)
Contatti:

Re: [java]eccezione sempre lanciata

Messaggio 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?
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]eccezione sempre lanciata

Messaggio 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??
Ultima modifica di misterxxitalia il domenica 2 marzo 2008, 13:07, modificato 1 volta in totale.
Avatar utente
urbo83
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: giovedì 21 aprile 2005, 14:59
Desktop: GNOME 3.10
Distribuzione: ArchLinux x86_64
Località: Cesena (FC)
Contatti:

Re: [java]eccezione sempre lanciata

Messaggio 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();
}
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]eccezione sempre lanciata

Messaggio 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!!
Avatar utente
Massimo S.
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1931
Iscrizione: giovedì 28 settembre 2006, 14:34

Re: [java]eccezione sempre lanciata

Messaggio 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
Ultima modifica di Massimo S. il lunedì 3 marzo 2008, 17:34, modificato 1 volta in totale.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti