BST kereszteződés, NullPointerException

szavazat
0

Én próbálunk létrehozni egy új BST metszéspontjában 2 ismert BSTs. Kapok egy NullPointerException a intersect2 eljárás int neki második esetben a vonal cur3.item.set_account_id (cur1.item.get_accountid () + cur2.item.get_accountid ());. Tudom, hogy kap a hiba, amikor megpróbálja dereference változó nélkül inicializáló de azt hiszem, én inicializálnunk? Nem vagyok benne biztos. Örülnék segítséget.

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

Itt látható a képen a problémát: írja

A kérdést 20/04/2011 20:49
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
0

Ez azért van, mert az elem változó Customer objektum nem inicializált.

Válaszolt 20/04/2011 20:53
a forrás felhasználó

szavazat
0

Vajon létre egy BTNode automatikusan osztja el a tag item?

Te teszed:

cur3.item.set_account_id(.. )

Ahhoz, hogy ez sikeres legyen, mindkét cur3és cur3.itemkell, hogy legyen és nem null.

Ugyanez vonatkozik a cur1és cur2is, hogy az Ön által hivatkozott később ebben a sorban.

És a példa a 3. eset azt mutatja, hogy BTNode.item lehet null egyes forgatókönyvek:

cur3.item=null;
Válaszolt 20/04/2011 21:10
a forrás felhasználó

szavazat
1

A NullPointerException oka lehet egy sor dolgot. Az Ön által megadott példában cur1 és cur2 nem nulla, de nincs garancia arra, hogy cur1.item, cur1.item.accountId (és hasonlóan cur2) nem null.

Mivel, ahogy nincs leírása a mögöttes végrehajtására, nem tudok további segítséget. Azt javasolnám, hogy te néhány néhány dolgot:
1.) végrehajtásának ellenőrzése a tárgyak (ha ez történik minden alkalommal, lehet, hogy valamilyen inicializálási probléma.
2.) Amikor létrehoz egy példányt az elem, akkor győződjön meg róla, hogy adja meg a fiókhoz tartozó területen? Próbálja az alapértelmezett értéket az ezen a területen, így nem lehet null. (próbálja valamilyen illegális érték [pl -1, hamis, stb.] és a vizsgálati érte.

Ha tegye több végrehajtásának részleteit, azt (vagy valaki) lehet, hogy közvetlenül a probléma azonosításában.

Üdvözlettel.

Edit: 4/20 @ 17: 11 Íme egy példa arra, mit kell tennie.

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;  
    }
}
Válaszolt 20/04/2011 21:11
a forrás felhasználó

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