BST intersection, NullPointerException

voix
0

Je suis en train de créer un nouveau BST de l'intersection de 2 BSTS connus. Je reçois un NullPointerException dans la méthode intersect2 int il second cas, à la ligne cur3.item.set_account_id (cur1.item.get_accountid () + cur2.item.get_accountid ());. Je sais que vous obtenez l'erreur lorsque vous essayez de déréférencer la variable sans l'initialiser, mais je pense que je suis initialisant? Je ne suis pas vraiment sûr. Je vous serais reconnaissant de l'aide.

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;
}

Voici l'image du problème: entrez

Créé 20/04/2011 à 20:49
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
0

Il est parce que la variable d'élément dans l'objet client est pas initialisé.

Créé 20/04/2011 à 20:53
source utilisateur

voix
0

Est -ce que la création d' un BTNode attribue automatiquement ses membres item?

Tu fais:

cur3.item.set_account_id(.. )

Pour que cela réussisse, à la fois cur3et cur3.itemdoivent être non nulle.

Même pour cur1et cur2ainsi, que vous faites référence à plus tard dans cette ligne.

Et l'exemple du 3e cas montre que BTNode.item peut être nul dans certains scénarios:

cur3.item=null;
Créé 20/04/2011 à 21:10
source utilisateur

voix
1

Un NullPointerException peut être causée par un certain nombre de choses. Dans votre exemple donné, cur1 et cur2 ne sont pas nulles, mais il n'y a aucune garantie que cur1.item, cur1.item.accountId (et de même pour cur2) ne sont pas nulles.

Être comme vous avez pas de description pour la mise en œuvre sous - jacente, je ne peux pas aider. Je vous suggère de faire quelques - unes de quelques choses:
1.) vérifier la mise en œuvre de vos objets (si cela se produit à chaque fois, il peut y avoir une sorte de problème d'initialisation.
Chaque fois que vous créez une instance de votre article 2.), faire vous assurez - vous de préciser le champ accountId? Essayez de donner une valeur par défaut de ce champ ne peut donc pas être nulle. (essayez une sorte de valeur illégale [par exemple -1, faux, etc.] et un test pour elle.

Si vous posterais plus de détails de mise en œuvre, je (ou quelqu'un) peut être en mesure d'identifier directement le problème.

Cordialement.

Edit: 4/20 @ 17: 11 Voici un exemple de ce que vous devriez faire.

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;  
    }
}
Créé 20/04/2011 à 21:11
source utilisateur

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