intersección BST, NullPointerException

votos
0

Estoy tratando de crear un nuevo BST desde la intersección de 2 BSTs conocidos. Me estoy haciendo una NullPointerException en el método int intersect2 él segundo caso, en la línea de cur3.item.set_account_id (cur1.item.get_accountid () + cur2.item.get_accountid ());. Sé que se obtiene el error cuando intenta eliminar la referencia de la variable sin inicializar, pero creo que soy inicializarlo? No estoy realmente seguro. Apreciaría la ayuda.

public static Bst<Customer> intersect(Bst<Customer> a, Bst<Customer> b){
     return( intersect2(a.root, b.root));
 }

  public static Bst<Customer> intersect2(BTNode<Customer> cur1, BTNode<Customer> cur2){
  Bst<Customer> result = new Bst<Customer>();

// 1. both empty -> true
  if (cur1==null && cur2==null){
  result=null;
 }
// 2. both non-empty -> compare them
 else if (cur1!=null && cur2!=null) {
  BTNode<Customer> cur3 = new BTNode<Customer>();
  cur3.item.set_account_id(cur1.item.get_accountid()+ cur2.item.get_accountid());
  result.insert(cur3.item);
  intersect2(cur1.left, cur2.left);
  intersect2(cur1.right, cur2.right);
 }

// 3. one empty, one not -> false
else if (cur1==null ||cur2==null){
  BTNode<Customer> cur3 = new BTNode<Customer>();
  cur3.item=null;
  intersect2(cur1.left, cur2.left);
  intersect2(cur1.right, cur2.right);
}
 return result;
}

Aquí está la imagen del problema: introducir

Publicado el 20/04/2011 a las 20:49
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
0

Se debe a que la variable elemento de objeto Cliente no se ha inicializado.

Respondida el 20/04/2011 a las 20:53
fuente por usuario

votos
0

No la creación de un BTNode asigne automáticamente sus miembros item?

Tú lo haces:

cur3.item.set_account_id(.. )

Para que esto tenga éxito, tanto cur3y cur3.itemtienen que ser no nulo.

Lo mismo se aplica a cur1, y cur2así, de que se hace referencia más adelante en esa línea.

Y el ejemplo de la tercera caso demuestra que BTNode.item puede ser nulo en algunos escenarios:

cur3.item=null;
Respondida el 20/04/2011 a las 21:10
fuente por usuario

votos
1

Un NullPointerException puede ser causada por una serie de cosas. En el ejemplo dado, cur1 y cur2 no son nulos, pero no hay ninguna garantía de que cur1.item, cur1.item.accountId (y lo mismo para cur2) no son nulos.

Ser como usted no tiene ninguna descripción para la implementación subyacente, no puedo ayudar más. Puedo sugerir que lo hace un poco de algunas cosas:
. 1.) comprobar la aplicación de los objetos (si esto sucede cada vez, puede haber algún tipo de problema de inicialización
2.) Siempre que se crea una instancia de su artículo, hacer usted, asegúrese de especificar el campo ID de cuenta? Trate de darle un valor predeterminado para este campo por lo que no puede ser nulo. (probar una especie de valor ilegal [por ejemplo, -1, falso, etc] y prueba de ello.

Si desea publicar más detalles de implementación, I (o alguien) puede ser capaz de identificar directamente el problema.

Saludos.

Editar: 4/20 @ 17: 11 Aquí está un ejemplo de lo que debería estar haciendo.

public class Customer {  
    private int accountId;  

    public Customer() {  
        this.accountId = 0;  
    }  

    public Customer(int account_identification) {  
        this.accountId = account_identification);  
    }  

    //As a side note, general practice implies fields be private  
    //Use a method (hence the term 'getter' and the reciprocal, 'setter')  
    public int getId() {  
        return this.accountId;  
    }  

    public void setId(int replacement_account_identification) {  
        this.accountId = replacement_account_identification;  
    }
}
Respondida el 20/04/2011 a las 21:11
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more