BST intersezione, NullPointerException

voti
0

Sto cercando di creare un nuovo BST dall'incrocio di 2 BST noti. Sto ottenendo un NullPointerException nel metodo intersect2 int egli secondo caso, alla linea cur3.item.set_account_id (cur1.item.get_accountid () + cur2.item.get_accountid ());. So che si ottiene l'errore quando si tenta di dereference variabile senza inizializzarla ma penso di inizializzazione? Non sono veramente sicuro. Apprezzerei l'aiuto.

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

Ecco l'immagine del problema: entrare

È pubblicato 20/04/2011 alle 20:49
fonte dall'utente
In altre lingue...                            


3 risposte

voti
0

È perché la variabile elemento in oggetto Customer non è inizializzata.

Risposto il 20/04/2011 a 20:53
fonte dall'utente

voti
0

Ha la creazione di un BTNode allocare automaticamente il suo membro item?

Tu fai:

cur3.item.set_account_id(.. )

Per questo per avere successo, sia cur3e cur3.itemhanno bisogno di essere non nullo.

Lo stesso vale per cur1e cur2pure, che si fa riferimento più avanti in quella linea.

E l'esempio del 3 ° caso dimostra che BTNode.item può essere nullo in alcuni scenari:

cur3.item=null;
Risposto il 20/04/2011 a 21:10
fonte dall'utente

voti
1

Un NullPointerException può essere causato da una serie di cose. Nella tua data esempio, cur1 e cur2 non sono nulli, ma non v'è alcuna garanzia che cur1.item, cur1.item.accountId (e analogamente per cur2) non sono nulli.

Essere come hai una descrizione per l'implementazione sottostante, non posso assistere ulteriormente. Posso suggerire che fare un po 'di un paio di cose:
. 1.) verificare l'attuazione degli oggetti (se questo accade ogni volta, ci può essere una sorta di problema di inizializzazione
2.) Ogni volta che si crea un'istanza del vostro articolo, fare hai la certezza di specificare il campo accountid? Provare a dare un valore predefinito per questo campo in modo che non può essere nullo. (provare una sorta di valore illegale [es -1, falso, ecc] e prova per esso.

Se si desidera inviare i dettagli di implementazione, I (o qualcuno) può essere in grado di identificare direttamente il problema.

Saluti.

Edit: 4/20 @ 17: 11 Ecco un esempio di ciò che si dovrebbe fare.

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;  
    }
}
Risposto il 20/04/2011 a 21:11
fonte dall'utente

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