BST चौराहे, NullPointerException

वोट
0

मैं 2 में जाना जाता BSTs के चौराहे से एक नया BST बनाने के लिए कोशिश कर रहा हूँ। मैं, intersect2 विधि पूर्णांक वह दूसरे मामले में एक NullPointerException हो रही लाइन में cur3.item.set_account_id (cur1.item.get_accountid () + cur2.item.get_accountid ());। मैं जब आप इसे आरंभ करने के बिना चर भिन्नता करने की कोशिश आप त्रुटि मिलती है, लेकिन मुझे लगता है कि मैं इसे आरंभ कर रहा हूँ? मैं बहुत पक्का नहीं हूँ। मैं मदद की सराहना करेंगे।

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

यहाँ समस्या की छवि है: यहाँ

20/04/2011 को 20:49
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
0

क्योंकि ग्राहक वस्तु में आइटम चर प्रारंभ नहीं किया गया है यह है।

20/04/2011 को 20:53
का स्रोत उपयोगकर्ता

वोट
0

बनाना एक BTNode स्वचालित रूप से अपने सदस्य का आवंटन करता है item?

तुम करो:

cur3.item.set_account_id(.. )

इस सफलता के लिए, दोनों cur3और cur3.itemरिक्त नहीं हो की जरूरत है।

उसी पर लागू होता है cur1और cur2साथ ही साथ, कि तुम उस लाइन में बाद में संदर्भ।

और 3 मामले की उदाहरण से पता चलता BTNode.item कुछ परिस्थितियों में अशक्त हो सकते हैं:

cur3.item=null;
20/04/2011 को 21:10
का स्रोत उपयोगकर्ता

वोट
1

एक NullPointerException चीजों की एक संख्या की वजह से हो सकता है। आपके दिए गए उदाहरण में, cur1 और cur2 अशक्त नहीं हैं, लेकिन कोई गारंटी नहीं कि cur1.item, cur1.item.accountId (और इसी तरह cur2 के लिए) अशक्त नहीं हैं नहीं है।

के रूप में आप अंतर्निहित कार्यान्वयन के लिए कोई विवरण नहीं है होने के नाते, मैं और सहायता नहीं कर सकते हैं। : मेरा सुझाव है कि आप कर सकते हैं कुछ चीजें से कुछ करना
1.) (अपने वस्तुओं के कार्यान्वयन की जाँच करता है, तो यह हर समय होता है, वहाँ प्रारंभ समस्या किसी प्रकार का हो सकता है।
, 2.) जब भी आप अपने आइटम का एक उदाहरण बना सकता हूँ आप खाते के क्षेत्र निर्दिष्ट करना सुनिश्चित करें? इस क्षेत्र के लिए एक डिफ़ॉल्ट मान दे रही है तो यह शून्य नहीं हो सकता की कोशिश करो। (कुछ [जैसे -1, झूठे, आदि] और इसके लिए अवैध मूल्य की तरह परीक्षण की कोशिश करो।

आप और अधिक कार्यान्वयन विवरण पोस्ट चाहते हैं, तो मैं (या किसी को) सीधे समस्या की पहचान करने में सक्षम हो सकता है।

सादर।

संपादित करें: 4/20 @ 17: 11 यहाँ आप क्या कर किया जाना चाहिए का एक उदाहरण है।

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;  
    }
}
20/04/2011 को 21:11
का स्रोत उपयोगकर्ता

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