exception en arbol binario

Iniciado por m@o_614, 22 Noviembre 2014, 20:00 PM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

Saludos

Estoy creando una arbol binario, en el cual los elementos del nodo son un apuntador al nodoIzquierdo, un  apuntador al nodoDerecho y el dato sería de tipo L, que a su vez es una clase que contiene dos elementos de tipo String uno que se llama lexema y otro categoria.

Para la clase NodoArbol tengo 2 constructores uno al que le paso un objeto de tipo L, y otra al que le paso simplemente un String, y ese string lo tengo que almacenar en el campo lexico de un objeto L, por eso lo hice de la siguiente manera:

Código (java) [Seleccionar]
class L{
String lexico;
String categoria;

L(){
lexico = "";
categoria = "";
}
}

class NodoArbol{
NodoArbol nodoIzq;
NodoArbol nodoDer;
L lexema;

public NodoArbol(L datos){
lexema = datos;
nodoIzq = nodoDer = null;
}

public NodoArbol(String datos) {
lexema.lexico = datos;// aqui esta el error
lexema.categoria = "";
nodoIzq = nodoDer = null;
}

public void insertar(L datos){
if((datos.categoria).equals("Id"))
{
if(nodoIzq == null)
{
System.out.println("nodo lado izquierdo");
   nodoIzq = new NodoArbol(datos);
}
else
   nodoIzq.insertar(datos);
}
else
{
if(nodoDer == null)
   nodoDer = new NodoArbol(datos);
else
   nodoDer.insertar(datos);
}
}

}

class Arbol{
private NodoArbol raiz;
public Arbol sig;

public Arbol(){
raiz = null;
sig = null;
}

public void insertarNodo(String datos) {
if(raiz == null)
{
       raiz = new NodoArbol(datos);
}
}

public void insertarNodo(L datos){
if(raiz == null)
{
       raiz = new NodoArbol(datos);
}
else
   raiz.insertar(datos);
}
}


el problema es que a la hora de mandar llamar al metodo insertarNodo() con un String como argumento, me manda un excepcion NullPointerException, en el siguiente constructor:

Código (java) [Seleccionar]
public NodoArbol(String datos) {
lexema.lexico = datos;// aqui esta el problema
lexema.categoria = "";
nodoIzq = nodoDer = null;
}


y no tengo idea de cómo arreglarlo

gracias de antemano

DarK_FirefoX

El problema es que tienes que inicializar el objeto lexema antes de poder asignarle valores a las variables lexico y categoria

Entiendes?

Seria algo asi como:

Código (java) [Seleccionar]
   
public NodoArbol(String datos) {
    lexema = new L(); //INICIALIZA EL OBJETO
    lexema.lexico = datos;// YA NO DEBE HABER PROBLEMAS
    lexema.categoria = "";
    nodoIzq = nodoDer = null;
    }


Te voy a dar una recomendación, creo que sería mejor para tu código si al constructor de la clase L le añadieras una sobrecarga que fuera algo así como:

Código (java) [Seleccionar]

class L{
    String lexico;
    String categoria;

    L(){
       lexico = "";
       categoria = "";
    }

    //SOBRECARGA
    L(String lex, String cat){
        lexico = lex;
        categoria = cat;
    }
}


Con esta sobrecarga te ahorras el trabajo de además de crear el objeto, tener que asignarle valores a las variables fuera de la clase L, el constructor se encarga de eso una vez le pases como parámetros los valores correspondientes.

Espero te haya podido ayudar

PD: Te digo sobrecarga pues quizas de acuerdo a la naturaleza de tu problema necesites tener un constructor que le asigne cadenas vacías a las variables. En caso de que no lo necesites lo puedes quitar, que de igual manera si lo necesitaras solo tienes que pasarle al nuevo constructor los valores

Código (java) [Seleccionar]
new L("","");