İkili Arama Ağacı Kullanıcı K [] Preorder () yöntemi: jenerik iadesi konusunda

oy
0

Uygulama Kullanım: Ekim Veri Yapısı Laboratuarı Egzersiz / 28/2011 yapmak için: a İkili Arama Ağacı Uygulamak

Sorun: Yöntemler ön sipariş edin K [] dönüş (), Inorder () ve postorder ()

Sorun Detayları: BST sadece bir parametre olarak kendi kök olması gerekir. Yukarıda bahsedilen yöntem aşağıdaki gibi profesörü tarafından verilen bir arabirim olarak tarif edilmiştir:

    /**
    * Returns an array of keys filled according
    * to the pre-order traversing in a BST.  
    */      
    public K[] preOrder();      
    public K[] order();         
    public K[] postOrder();

Aşağıdaki kod ile jenerik dizi örneğini verebilir:

public K[] preOrder() {

    if (root == null) { return null; }

    ArrayList<K> list = new ArrayList<K>();
    preOrderRecursive(root,list);
    K[] toReturn = (K[]) Array.newInstance(this.getRoot().getKey().getClass(), list.size());

    for (int i = 0; i < list.size(); i++) {
        toReturn[i] = list.get(i);
    }

    return toReturn;
}

Ama, ben de bizim profesör tarafından sağlanan bir test sınıfını kullanarak yöntemi test edildiğinde, ben bir NullPointerException var ben bir kez örneği olmuştur BST köküne bahsediyor düşünüyorum, ama testte noktada kaldırıldı wich tekrar yöntemini çağırdığında, ve yönteminin, beklendiği gibi boş değil, boş bir dizi döner:

    (...)

    tree1 = new BSTImpl<Integer, Integer>();
    for (int i = 0; i < SIZE; i++) {
        tree1.insert(i, i);
    }
    tree1.remove(1);
    tree1.remove(2);
    tree1.remove(3);
    tree1.remove(4);
    assertArrayEquals(new Integer[]{},tree1.preOrder());

    (...)

ben bu İstisna önlemek için ne yapabilirim, ben dönüş türü ne de yöntemin parametrelerini değiştiremez bilerek? i nasılsa bileşen türü almak ve (nasıl geçti i? bunu) boş dizi örneğini kullanabilir miyim?

Benim kod geliştirmek için herhangi bir ipucu de açıktır.

Oluştur 30/10/2011 saat 21:33
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Soru edilir: Gerçekten Do lüzum bir tamsayı dizisi döndü? - Ben öyle düşünmüyorum.

Ben varsayalım assertArrayEquals()yok değil Dizilerin bileşeni türünü kontrol ziyade sadece içerdiği değerleri karşılaştırır.

Eğer gösterdi kod ile, ben başka bir şey nedeniyle tip silme mümkün olmaz söyleyebilirim.

Yani bir geri vermeyi deneyin Object[]ne olursa olsun süper türü veya sizin durumda geçerlidir:

return new Object[0];

ve

return list.toArray();

(Işaretlenmemiş atmalarını zorunlu değildir, ancak o ok olmalı)

DÜZENLE:

Ok, bu nedenle <K extends Comparable>?
Bu durumda Kullanımda:

return new Comparable[0];

ve

return (Comparable[])list.toArray(new Comparable[]);

Cevap 30/10/2011 saat 22:00
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more