elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  sencilla duda con .NullPointerException ,
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: sencilla duda con .NullPointerException ,  (Leído 1,927 veces)
manolazo

Desconectado Desconectado

Mensajes: 11


Ver Perfil
sencilla duda con .NullPointerException ,
« en: 15 Enero 2013, 22:10 pm »

Buenas tardes.

Soy  novato en esto de java pero hay un concepto que no entiendo en el siguiente código.

Código:
public class ClaseA {
   
    public int x[];       
    public ClaseB c;
   
    public ClaseA (){       
        x = new int[2];       
        for (int i=0; i<x.length; ++i){
            x[i]= i;
        }           
        c= new ClaseB(x[1]);   
        mostrar();   
    }   
   
    public void mostrar(){       
        c.calcu();
       c.mostrarenClase();             
       System.out.println(c.a );     
       
    }
   
    public static void main (String args[]){     
        ClaseA p = new ClaseA();
       
    }   
}


Código:
public class ClaseB {
    public int a;
    public ClaseA p ;
   
    public ClaseB(int x){
        this.a= x;         
    }
   
    public void calcu(){
        a++;       
    }
   
    public void mostrarenClase(){       
        System.out.println(p.x[1]);
    }         
}

Creo un objeto de la claseB , y cuando llamo el metodo mostrarenClase() es cuando me sale el NUllPointerException.

Supongo es porque en la claseB no creo un objeto de la claseA y por eso en la declaracion de variable de la claseB : ClaseA p; no esta inicializado y al llamar a p.x[1] me sale el error .

Se ve que hay algun concepto que no tengo claro.

Como se soluciona?

Un saludo y gracias de antemano.


En línea

juancaa

Desconectado Desconectado

Mensajes: 140


[ Img^(Img) = Real ]


Ver Perfil
Re: sencilla duda con .NullPointerException ,
« Respuesta #1 en: 16 Enero 2013, 03:21 am »

Tu error esta en la Clase B, tu problema es que claramente estas haciendo un print de un objeto de Clase A al cual en tu codigo tu llamas p y no lo estas inicializando, la solucion seria esta:

ClaseA:
Código
  1. public class ClaseA {
  2.  
  3.    public int x[];        
  4.    public ClaseB c;
  5.  
  6.    public ClaseA (){        
  7.        x = new int[2];        
  8.        for (int i=0; i<x.length; ++i){
  9.            x[i]= i;
  10.        }            
  11.        c= new ClaseB(x[1], this);  
  12.        mostrar();    
  13.    }    
  14.  
  15.    public void mostrar(){        
  16.        c.calcu();
  17.       c.mostrarenClase();              
  18.       System.out.println(c.a );    
  19.  
  20.    }
  21.  
  22.    public static void main (String args[]){      
  23.        ClaseA p = new ClaseA();
  24.  
  25.    }    
  26. }

Clase B:
Código
  1. public class ClaseB {
  2.    public int a;
  3.    public ClaseA p ;
  4.  
  5.    public ClaseB(int x, ClaseA p){
  6.        this.a= x;          
  7.        this.p = p;
  8.    }
  9.  
  10.    public void calcu(){
  11.        a++;        
  12.    }
  13.  
  14.    public void mostrarenClase(){        
  15.        System.out.println(p.x[1]);
  16.    }          
  17. }

Es decir, en el momento en que tu mandas que se muestre p.x[1] estando dentro de la Clase B estas haciendo referencia a un atributo de la Clase A por tanto para poder mostrar ese atributo debes antes haber inicializado la variable cosa que haces en las lineas 7, 8, 9 tu problema esta en que para poder mostrar este atributo la Clase A debes poder acceder a la Clase A, la forma de hacerlo es pasando la Clase A en el momento en que creas la Clase B (linea 11) y la forma de pasarla es pasandose a ella misma, por eso el "this", con esto todo el contenido "public" de la Clase A sera accesible por tu Clase B.

Espero haberme explicado...  :xD


En línea

Que tengas un buen dia!
manolazo

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: sencilla duda con .NullPointerException ,
« Respuesta #2 en: 16 Enero 2013, 12:24 pm »

Hola.

La única forma que venia era hacer una instancia de la claseA , pero claro eso complica las cosas porque se vuelve a formar otro objeto de la claseB y asi siempre lanzandose un StackOverFlow error.

Muchisimas gracias por la aclaración ya que simplifique el código de una parte mas grande que me tenia comida la cabeza en algo tan sencillo. Está claro que todavía me falta mucho por aprender.

Lo dicho muchas gracias por tomarte el interés de ayudarme. Buen foro.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda sencilla sobre swishmax ??
Diseño Gráfico
mit 4 3,452 Último mensaje 9 Enero 2004, 13:46 pm
por mit
Una duda sencilla
Programación Visual Basic
vivachapas 3 1,596 Último mensaje 26 Mayo 2006, 04:48 am
por JuszR
[DUDA SENCILLA] DELPHI
Programación General
Psyke1 3 2,826 Último mensaje 5 Octubre 2010, 20:00 pm
por Psyke1
Duda sencilla en Java
Java
Feedeex 6 4,498 Último mensaje 8 Marzo 2011, 01:45 am
por Valkyr
Duda sencilla
Java
Juanma91 2 1,869 Último mensaje 6 Junio 2014, 11:22 am
por Juanma91
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines