BST kruising, NullPointerException

stemmen
0

Ik ben op zoek naar een nieuwe BST van het snijpunt van 2 bekende BSTS creëren. Ik krijg een NullPointerException in de intersect2 methode int hij tweede geval op de regel cur3.item.set_account_id (cur1.item.get_accountid () + cur2.item.get_accountid ());. Ik weet dat u de foutmelding krijgt wanneer u probeert om dereference de variabele zonder te initialiseren, maar ik denk dat ik te initialiseren? Ik ben niet helemaal zeker. Ik zou de hulp waarderen.

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

Hier is het beeld van het probleem: voer

De vraag is gesteld op 20/04/2011 om 20:49
bron van user
In andere talen...                            


3 antwoorden

stemmen
0

Het is omdat het object variabele in Customer object niet is geïnitialiseerd.

antwoordde op 20/04/2011 om 20:53
bron van user

stemmen
0

Is het creëren van een BTNode automatisch het lid toe te wijzen item?

Je doet:

cur3.item.set_account_id(.. )

Om dit te laten slagen, zowel cur3en cur3.itemhoeven niet nul te zijn.

Hetzelfde geldt voor cur1en cur2zo goed, dat je later verwijzen in die lijn.

En het voorbeeld van het geval 3 blijkt dat BTNode.item null kan in sommige gevallen:

cur3.item=null;
antwoordde op 20/04/2011 om 21:10
bron van user

stemmen
1

Een NullPointerException kan worden veroorzaakt door een aantal dingen. In je gegeven voorbeeld CUR1 en CUR2 zijn niet nul, maar er is geen garantie dat cur1.item, cur1.item.accountId (en hetzelfde geldt voor CUR2) zijn niet nul.

Zijn als je geen beschrijving van de onderliggende implementatie, kan ik niet verder helpen. Ik stel voor dat u een deel van een paar dingen doen:
. 1.) controleert de uitvoering van uw objecten (als dit gebeurt elke keer, kan er een soort van initialisatie probleem
2.) Wanneer u een exemplaar van uw punt te maken, doet u ervoor zorgen dat het veld ACCOUNTID specificeren? Probeer het geven van een standaard waarde voor dit veld, zodat het niet nul kan zijn. (probeer een soort van illegale waarde [bijvoorbeeld -1, vals, etc] en test voor het.

Als u meer implementatie details zou plaatsen, kan ik (of iemand) in staat zijn om het probleem direct te identificeren.

Vriendelijke groeten.

Edit: 4/20 @ 17: 11 Hier is een voorbeeld van wat je zou moeten doen.

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;  
    }
}
antwoordde op 20/04/2011 om 21:11
bron van user

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