2016-03-30 34 views
0

Bir BST uygulamaya çalışıyorum. Düğüme bir anahtar ve değer eklemeye çalışıyorum. Şimdiye kadar sahip olduğum şey bu. Ama ben bunu nasıl düzelttim? Eğer açık bir yapıcı kaynağı yoksaBST: Sınıfta Oluşturucu Düğümü. Düğüm, verilen türlere uygulanamaz;

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

cevap

1

Java'da, ardından derleyici hiçbir şey yapmaz sizin için bir örtük, no-arg veya "varsayılan", yapıcı insert ancak üst sınıf yapıcısı arayacak. Bu, Node sınıfınız için oluyor. Ancak

, bu hat üzerinde bir Node oluşturma girişiminde: Bir varsayılan, no-arg yapıcı, dolayısıyla hata 2 parametrelerini geçirmek için çalışıyorsunuz

return new Node (key, value); 

. Java otomatik olarak parametreler almaz ve örnek değişkenlere birer birer atamaz. Kurucular Java'da böyle çalışmıyor.

Node sınıfınızda 2 parametreyi açıkça alan Node yapıcınızı bildirebilirsiniz.

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

Bu doğru olur mu? sınıf Düğümü { Düğüm kaldı; Düğüm sağda; KVPair kv; K tuşu; V değeri; genel Düğüm (K tuşu, V değeri) { \t \t \t this.key = key; \t \t \t this.value = value; \t \t} } – amelia