View Full Version : [JAVA] nullPointerException : aiuto
foxmolder5
02-09-2004, 15:41
public class pippo {
public pippo(){
int[][] salve ;
salve = new int[][] {{1,2,3,4},
{2,3,4,5},
{3,4,5,6}};
}
public void run(){
if(salve[1][2] == num).....
}
......}
questo è una parte di codice del programma.in compilazione nessun problema ma quando lo vado ad avviare mi viene dato un errore nullPointerExcepetion alla riga dell'if all'interno del metodo run
del thread.premetto che nel medoto main ho già provveduto ad istanziare un oggetto di tipo pippo e quindi il costruttore mi è partito.
ma il problema è che ora alla riga dell'if mi viene dato errore in esecuzione di tipo nullPointerException.non riesco proprio a capire il problema!!
l'array salve viene usato prima di essere istanziato...Inizializzalo in fase di dichiarazione...
foxmolder5
02-09-2004, 16:27
ERRATA CORRIGE: avevo sbagliato a scrivere.ecco il codice esatto
public class pippo {
int[][] salve;
public pippo(){
salve = new int[][] {{1,2,3,4},
{2,3,4,5},
{3,4,5,6}};
}
public void run(){
if(salve[1][2] == num).....
}
......}
ci riporti il messaggio esatto?
il codice sembra correto
foxmolder5
02-09-2004, 16:51
Originariamente inviato da kingv
ci riporti il messaggio esatto?
il codice sembra correto
questa è una parte dell'intero programma,che ho anche semplificato.se vuoi che lo metto tutto sono 200righe.dimmi tu.
foxmolder5
02-09-2004, 17:05
ecco il sorgente! rinominalo in .java
il problema e' che quando chiami il costruttore con parametri quello vuoto (che istanzia gli array tra cui "percorso" ) non viene chiamato.
devi allocare "percorso" anche nel costruttore con parametri
foxmolder5
02-09-2004, 17:17
Originariamente inviato da kingv
il problema e' che quando chiami il costruttore con parametri quello vuoto (che istanzia gli array tra cui "percorso" ) non viene chiamato.
devi allocare "percorso" anche nel costruttore con parametri
non ho capito.per favore puoi spiegarti meglio?grazie
foxmolder5
02-09-2004, 18:44
Originariamente inviato da kingv
il problema e' che quando chiami il costruttore con parametri quello vuoto (che istanzia gli array tra cui "percorso" ) non viene chiamato.
devi allocare "percorso" anche nel costruttore con parametri
no,io chiamo entrambi i costruttori.perchè se vedi all'inizio del metodo main c'è la dichiarazione dell'istanza creaGrafo che essendo senza parametri mi chiama il costruttore senza parametri e quindi mi crea tutte le matrici.
Originariamente inviato da foxmolder5
no,io chiamo entrambi i costruttori.perchè se vedi all'inizio del metodo main c'è la dichiarazione dell'istanza creaGrafo che essendo senza parametri mi chiama il costruttore senza parametri e quindi mi crea tutte le matrici.
eh no, prima lo crei correttamente con il costruttore vuoto, poi a un certo punto vedo questa chiamata:
camminoMinimo ameba = new camminoMinimo(tmp,tmp1,i,tmp2);
da questo punto in poi camminoMinimo e' un NUOVO oggetto che hai creato usando il costruttore con parametri, con "percorso" quindi non istanziato
foxmolder5
02-09-2004, 20:36
avevo immaginato il prob.grazie :-)
dato che ci sono ti chiedo qualche altra info.allora io non voglio che automaticamente vengano caricati gli array da me creati.a seconda del valore di una variabile (questo procedimento nn è stato ancora inserito ma la scrittura e organizzazione del programma è stata fatta con l'ipotesi di aggiungere tale funzione) il programma decide se inizializzare le variabili ai valori scritti in camminoMinimo() oppure se metterci valori a caso,quindi non voglio che le matrici vengano x forza istanziate con quei valori e quindi nn le vorrei inserire x forza nel costruttore camminoMinimo(int....).secondo te come posso fare per risolvere il prob del post e per mantenere la compatibilità con tale futuro ampliamento?
non sono sicuro di avere capito il problema.
cmq potresti fare un costruttore che prende in ingresso un boolean che indica se istanziare o meno gli array interni (quello che e' ora il costruttore vuoto).
il costruttore che invece prende i paramentri come prima cosa dovrebbe chiamare il costruttore vuoto (passando un false) e poi valorizzare gli oggeti che vengono passati come argomento.
foxmolder5
03-09-2004, 00:48
Originariamente inviato da kingv
non sono sicuro di avere capito il problema.
cmq potresti fare un costruttore che prende in ingresso un boolean che indica se istanziare o meno gli array interni (quello che e' ora il costruttore vuoto).
il costruttore che invece prende i paramentri come prima cosa dovrebbe chiamare il costruttore vuoto (passando un false) e poi valorizzare gli oggeti che vengono passati come argomento.
il problema è che se istanzio le matrici durante il ciclo for, prima di questo ciclo non ci potrò fare operazioni (cosa che invece faccio).
ora mi è venuta in mente una cosa.poi ti farò sapere.grazie mille
foxmolder5
04-09-2004, 08:52
il prob che mi dava il programma era che le matrici percorso,grafo,etc venivano istanziate da 1 oggetto e quindi non venivano viste dall'altro.
a questo punto le ho dichiarate static così almeno le creo solo una volta e vengono viste da tutte le classi che vi accedono.ora sembra che vada anche se devo fare qualche test x vedere se funziona tutto.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.