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:
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:
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
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:
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:
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
new L("","");