Foro de elhacker.net

Programación => Java => Mensaje iniciado por: m@o_614 en 22 Noviembre 2014, 20:00 pm



Título: exception en arbol binario
Publicado por: m@o_614 en 22 Noviembre 2014, 20:00 pm
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
  1. class L{
  2. String lexico;
  3. String categoria;
  4.  
  5. L(){
  6. lexico = "";
  7. categoria = "";
  8. }
  9. }
  10.  
  11. class NodoArbol{
  12. NodoArbol nodoIzq;
  13. NodoArbol nodoDer;
  14. L lexema;
  15.  
  16. public NodoArbol(L datos){
  17. lexema = datos;
  18. nodoIzq = nodoDer = null;
  19. }
  20.  
  21. public NodoArbol(String datos) {
  22. lexema.lexico = datos;// aqui esta el error
  23. lexema.categoria = "";
  24. nodoIzq = nodoDer = null;
  25. }
  26.  
  27. public void insertar(L datos){
  28. if((datos.categoria).equals("Id"))
  29. {
  30. if(nodoIzq == null)
  31. {
  32. System.out.println("nodo lado izquierdo");
  33.   nodoIzq = new NodoArbol(datos);
  34. }
  35. else
  36.   nodoIzq.insertar(datos);
  37. }
  38. else
  39. {
  40. if(nodoDer == null)
  41.   nodoDer = new NodoArbol(datos);
  42. else
  43.   nodoDer.insertar(datos);
  44. }
  45. }
  46.  
  47. }
  48.  
  49. class Arbol{
  50. private NodoArbol raiz;
  51. public Arbol sig;
  52.  
  53. public Arbol(){
  54. raiz = null;
  55. sig = null;
  56. }
  57.  
  58. public void insertarNodo(String datos) {
  59. if(raiz == null)
  60. {
  61.       raiz = new NodoArbol(datos);
  62. }
  63. }
  64.  
  65. public void insertarNodo(L datos){
  66. if(raiz == null)
  67. {
  68.       raiz = new NodoArbol(datos);
  69. }
  70. else
  71.   raiz.insertar(datos);
  72. }
  73. }

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
  1. public NodoArbol(String datos) {
  2. lexema.lexico = datos;// aqui esta el problema
  3. lexema.categoria = "";
  4. nodoIzq = nodoDer = null;
  5. }

y no tengo idea de cómo arreglarlo

gracias de antemano


Título: Re: exception en arbol binario
Publicado por: DarK_FirefoX en 22 Noviembre 2014, 21:46 pm
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
  1.  
  2. public NodoArbol(String datos) {
  3.    lexema = new L(); //INICIALIZA EL OBJETO
  4.    lexema.lexico = datos;// YA NO DEBE HABER PROBLEMAS
  5.    lexema.categoria = "";
  6.    nodoIzq = nodoDer = null;
  7.    }
  8.  

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
  1. class L{
  2.    String lexico;
  3.    String categoria;
  4.  
  5.    L(){
  6.       lexico = "";
  7.       categoria = "";
  8.    }
  9.  
  10.    //SOBRECARGA
  11.    L(String lex, String cat){
  12.        lexico = lex;
  13.        categoria = cat;
  14.    }
  15. }

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