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; 

Как исправить это?

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

В Java, если вы не предоставите явный конструктор, то компилятор вставит неявные, без аргументов, или «по умолчанию», конструктор для вас, что ничего не делает, но вызвать его конструктор суперкласса. Это происходит для вашего класса Node.

Однако при попытке создать Node на этой линии:

return new Node (key, value); 

Вы пытаетесь передать 2 параметры по умолчанию, конструктор без аргументов, отсюда и ошибки. Java не автоматически принимает параметры и назначает их по одному переменному экземпляра. Это не то, как конструкторы работают на Java.

Вы можете объявить свой конструктор Node, который явно принимает 2 параметра в вашем классе Node.

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

было бы правильно? class Node { Узел слева; Узел справа; KVPair kv; K ключ; Значение V; общественный узел (К-ключ, значение V) { \t \t \t this.key = ключ; \t \t \t это.значение = значение; \t \t} } – amelia