TSİ kavşak, NullPointerException

oy
0

Ben 2 bilinen BSTS kesişiminden yeni BST oluşturmaya çalışıyorum. Ben çizgi de, intersect2 yöntemi int o ikinci durumda bir NullPointerException alıyorum cur3.item.set_account_id (cur1.item.get_accountid () + cur2.item.get_accountid ());. Bunu başlatılıyor olmadan değişkene KQUEUE çalıştığınızda hata alıyorum biliyorum ama ben bunu başlatılıyor mi sanıyorsun? Pek emin değilim. Ben yardım bekleriz.

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

İşte sorunun resimdir: Burada

Oluştur 20/04/2011 saat 20:49
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
0

Müşteri nesne öğe değişken başlatılmadı nedeniyle öyle.

Cevap 20/04/2011 saat 20:53
kaynak kullanıcı

oy
0

Bir BTNode otomatik olarak üye tahsis oluştururken mu item?

Yapmalısın:

cur3.item.set_account_id(.. )

Bu başarılı olabilmesi için, her iki cur3ve cur3.itemboş değil olması gerekiyor.

Aynı için de geçerlidir cur1ve cur2bu çizgide daha sonra başvurmak olduğunu da.

Ve 3 davanın örneği BTNode.item bazı senaryolarda boş olabildiğini göstermektedir:

cur3.item=null;
Cevap 20/04/2011 saat 21:10
kaynak kullanıcı

oy
1

Bir NullPointerException şeylerin bir dizi neden olabilir. senin Verilen örnekte, cur1 ve cur2 boş değildir, ancak, cur1.item.accountId (ve benzer cur2 için) boş değildir cur1.item garantisi yoktur.

Eğer altta yatan uygulanması için hiçbir açıklama var olarak olmak, daha fazla yardımcı olamaz. Ben bir kaç bazı şeyleri olduğunu önerebilirsiniz:
. 1.) (senin nesnelerin uygulamasını kontrol bu HER zaman olur ise, başlatma sorun bir çeşit olabilir
2.) Eğer öğe bir örneğini oluşturduğunuzda, do Eğer accountId alanını belirtmek için emin olun? O boş olamaz bu yüzden bu alan için varsayılan bir değer vererek deneyin. (bunun için bazı yasadışı değer tür [örneğin 1, sahte, vs.] ve bir test deneyin.

Daha uygulama detayları yazılan olsaydıher (ya da birisi) doğrudan sorunu tanımlamak mümkün olabilir.

Saygılarımızla.

Düzenleme: 20/04 17 @: 11 Burada yapıyor olması gerektiğine dair bir örnek verilmiştir.

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;  
    }
}
Cevap 20/04/2011 saat 21:11
kaynak kullanıcı

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