2016-03-30 2 views
0

私はBSTを実装しようとしています。私は、ノードにキーと値を追加する作業をしています。これは私がこれまで持っていたものです。しかし、私はつづきましたBST:クラス内のコンストラクタノード。指定された型にノードを適用することはできません。

constructor Node in class EMD<K,V>. Node cannot be applied to given types. 
required: no arguments; found K,V; 

どうすればいいですか? Javaでは

class EMD<K extends Comparable<K>, V> implements RangeMap<K,V> { 
    class Node { 
     Node left; 
     Node right; 
     KVPair<K,V> kv; 
    } 

private Node root; 

public void add(K key, V value) { 
    // TODO: Implement me(basic score) 
    root = add (root, key, value); 
} 
private Node add(Node x, K key, V value){ 
    if (x == null){ 
     return new Node (key, value); 
     int cmp = key.compareTo(x.key); 
     if (cmp < 0){ 
      x.left = add(x.left, key, value);} 
      else if (cmp > 0){ 
       x.right = add(x.right, key, value);} 
       else if (cmp == 0){ 
        x.value = value;} 
       } 
        return x; 
} 

答えて

1

明示的なコンストラクタを提供しない場合、コンパイラは、暗黙の、引数なし、または「デフォルト」を挿入しない何もしないあなたのためのコンストラクタが、そのスーパークラスのコンストラクタを呼び出します。これはあなたのNodeクラスで発生しています。しかし

、あなたがこの行のNodeを作成しようとする:あなたがデフォルトに、引数なしのコンストラクタ、したがって、エラーを2つのパラメータを渡すためにしようとしている

return new Node (key, value); 

。 Javaは自動的にパラメータを取得せず、一度に1つずつインスタンス変数に割り当てます。これは、コンストラクタがJavaでどのように動作するかではありません。

Nodeクラスの2つのパラメータを明示的に使用するNodeコンストラクタを宣言できます。

Node(K k, V v) { 
    // Use k and v appropriately here. 
} 
+0

これは正しいですか?クラスノード{ ノードが残っています。 ノード権利。 KVPair kv; Kキー。 V値。 公開ノード(Kキー、V値){ \t \t \t this.key = key; \t \t \t this.value = value; \t \t} } – amelia

関連する問題