2016-04-11 13 views
0

Ich arbeite gerade an einem Projekt von RBTrees. Ich habe ein Problem mit einer Methode, die ein sortiertes Array zurückgeben muss, das alle Schlüssel in der Struktur enthält. Ich wollte verschachtelte Methoden verwenden, so dass die innere Methode das Array aktualisieren kann, aber eine schnelle Suche auf Google zeigte mir, dass ich das nicht tun kann. Irgendwelche Alternative? Das folgende ist mein Code:Alternative zu verschachtelten Methoden, Java

public int[] keysToArray() { 
    if(this.root==null){ 
     return (new int[0]); 
    } 
    int[] arr = new int[this.size()]; 
    public int ins_arr(RBNode p, int index){ 
     if(p==RBNode.nul){ 
      return index; 
     } 
     int so_far = ins_arr(p.getLeft(),index); 
     arr[so_far]=p.getKey(); 
     int so_far2 = ins_arr(p.getRight(),so_far+1); 
     return so_far2; 
    } 
    ins_arr(this.root,0); 
    return arr; 
} 
+1

Was meinen Sie mit "verschachtelten Methoden"? In Java können Sie keine Methoden verschachteln. Was genau versuchen Sie, dass Sie eine zusätzliche Methode dafür benötigen? – Stultuske

+1

Sie können Ihre Methodendefinition außerhalb der anderen Methodendefinition verschieben und das Array 'arr' als Parameter verwenden. – khelwood

Antwort

0

Als khelwood Zugvorschlag Methode in übergeordneten Klasse und fügen Sie Array arr als Parameter. So (ungetestet):

public int[] keysToArray() { 
    if(this.root==null){ 
     return (new int[0]); 
    } 
    int[] arr = new int[this.size()]; 
    ins_arr(arr, this.root,0); 
    return arr; 
} 

public int ins_arr(int[] arr, RBNode p, int index){ 
    if(p==RBNode.nul){ 
     return index; 
    } 
    int so_far = ins_arr(arr, p.getLeft(),index); 
    arr[so_far]=p.getKey(); 
    int so_far2 = ins_arr(arr, p.getRight(),so_far+1); 
    return so_far2; 
} 
0

mit einem rohen Array arbeiten kann schwierig sein, warum es nicht in einer Klasse wickeln, die den Einsatz der Fall ist, und hat einen Getter für das Array. Sie könnten es zu einer verschachtelten Klasse machen.

class KeyCollector { 

    private int[] arr; 

    public KeyCollector(int size) { 
     arr = new int[size]; 
    } 

    public int ins_arr(RBNode p, int index){ 
     if(p==RBNode.nul){ 
      return index; 
     } 
     int so_far = ins_arr(p.getLeft(),index); 
     arr[so_far]=p.getKey(); 
     int so_far2 = ins_arr(p.getRight(),so_far+1); 
     return so_far2; 
    } 

    public int[] getarray() { 
     return arr; 
    } 
} 

dann Ihre Methode ist:

public int[] keysToArray() { 
    if(this.root==null){ 
     return (new int[0]); 
    } 
    KeyCollector arr = new KeyCollector(this.size()); 

    arr.ins_arr(this.root,0); 
    return arr.getArray(); 
}