2016-04-11 11 views
0

私はRBTreesのプロジェクトに取り組んでいます。私は木のすべてのキーを含むソートされた配列を返す必要があるメソッドに問題があります。私はネストされたメソッドを使用して、内側のメソッドが配列を更新できるようにしたいと考えましたが、googleのクイック検索では私はそれを行うことができませんでした。代わりに?以下は、私のコードです:入れ子のメソッドの代わりに、

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

あなたは "ネストされたメソッド" とは何を意味するのですか? Javaでは、メソッドをネストすることはできません。あなたはそれのために追加の方法が必要であるとあなたは正確に何をしようとしていますか? – Stultuske

+1

メソッド定義を他のメソッド定義の外に移動し、 'arr'配列をパラメータとして取ることができます。 – khelwood

答えて

0

khelwoodは、親クラスに移動する方法を提案し、パラメータとして配列arrを追加します。この(未テスト)のように:トリッキーなことができ、生の配列を使用した作業

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

、なぜ挿入を行い、配列のgetterを持つクラスでそれをラップしていません。ネストされたクラスにすることができます。

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

次に、あなたの方法は次のとおりです。

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(); 
} 
関連する問題