Un altro caso banale di java.lang.NullPointerException

di il
1 risposte

Un altro caso banale di java.lang.NullPointerException

Allora ragazzi ciao a tutti... sto facendo un progetto per l'uni in java.. senza discutere troppo sulla forma del codice (per adesso sto buttando giù qualcosa di veloce per vedere se funzionano i vari algoritmi che ho in mente) io ho questo codice (ve lo riporto nello stesso ordine di come me lo da durante il debug, e vi aggiungo la classe che ho creato..

Exception in thread "main" java.lang.NullPointerException
at AlberoLF.addNode(AlberoLF.java:36)
at AlberoLF.addRoot(AlberoLF.java:47)
at TestAlberiLF.main(TestAlberiLF.java:11)


ora nel main richiamo addRoot, dentro addRoot richiamo addNode e dentro di quest'ultimo richiamo setGenitore (che a sua volta richiama getGenitore, ciò che io credo sia il vero problema)
ora ho letto nel web che questa eccezione la da quando un oggetto è null.. ma se io evo verificare l'esistenza di un oggetto, come posso fare altrimenti?, qui di seguito vi metto il codice
import java.util.ArrayList;


public class NodoLF<T> {

	private T data;
	private NodoLF<T> primoFiglio;
	private NodoLF<T> prossimoParente;
	private NodoLF<T> genitore;
	
	//costruttori
	
	public NodoLF(){
		
	}
	
	public NodoLF(T data){
		this.data=data;
	}
	
	public NodoLF(NodoLF<T> nodo){
		this.data=nodo.getData();
		this.primoFiglio=nodo.getPrimoFiglio();
		this.prossimoParente=nodo.getProssimoParente();
		this.genitore=nodo.getGenitore();
	}
import java.util.*;
public class TestAlberiLF {

	
	public static void main(String[] args){


		AlberoLF<Integer> tree=new AlberoLF<Integer>();
		
		NodoLF<Integer> root=tree.addRoot(9);
		
	public NodoLF<T> addRoot(T info){
		NodoLF<T> v=new NodoLF<T>(info);
		addNode(null,v);
		return v;
	}
	public NodoLF<T> addNode(NodoLF<T> nodoOld, NodoLF<T> nodoNew){
		nodoNew.setGenitore(nodoOld);           *****Qui mi da eccezione******
		nodoOld=nodoOld.getPrimoFiglio(); *****Altrimenti se tolgo la linea di sopra me la da qui
		while (nodoOld.getProssimoParente()!=null){
			nodoOld=nodoOld.getProssimoParente();
		}
		nodoOld.setProssimoParente(nodoNew);
		return nodoNew;
	}
	public void setData(T data){
		this.data=data;
	}
	
	public void setPrimoFiglio(NodoLF<T> nodo){
		this.primoFiglio=nodo;
	}
	
	public void setProssimoParente(NodoLF<T> nodo){
		this.prossimoParente=nodo;
	}
	
	public void setGenitore(NodoLF<T> nodo){
		this.genitore=nodo;
	}
	
public T getData(){
		if (this.data!=null)
			return this.data;
		else
			return null;
	}
	
	public NodoLF<T> getPrimoFiglio(){
		if (this.primoFiglio!=null)
			return this.primoFiglio;
		else
			return null;
	}
	
	public NodoLF<T> getProssimoParente(){
		if (this.prossimoParente!=null)
			return this.prossimoParente;
		else
			return null;
	}
	
	public NodoLF<T> getGenitore(){
		if (this.genitore==null)
			return new NodoLF<T>();
		else
			return this.genitore;
	}
	
grazie mille a chiunque risponderà

1 Risposte

  • Re: Un altro caso banale di java.lang.NullPointerException

    Ciao!
    il problema è che la variabile "nodoOld" dentro il metodo "addNodo" punta a null (infatti tu chiami il metodo "addNodo" passando come primo parametro "null"). Di conseguenza ogni metodo invocato su "nodoOld" ti lancia una NullPointerException.

    Una cosa che non capisco è che dici
    setGenitore (che a sua volta richiama getGenitore
    mentre nel codice c'è
    public void setGenitore(NodoLF<T> nodo){
          this.genitore=nodo;
       }
    se il metodo "setGenitore" è quello che hai messo te, non dovrebbe dare eccezioni di NullPointerException
Devi accedere o registrarti per scrivere nel forum
1 risposte