Strom binárního vyhledávání v K [] předobjednávku () Metoda: o generické návratu

hlasů
0

Realizace Využití: datová struktura Lab Cvičení na říjen / 28/2011 Postup: Zavést strom binárního vyhledávání

Problém: K [] Návrat metody preorder (), nezbytného () a postorder ()

Problém Podrobnosti: BST musí mít pouze jeho kořen jako parametr. Výše uvedených metod byly popsány v rozhraní dané naším profesorem jako následující:

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

Mohl bych instanci generického pole s následující kód:

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

Ale když jsem testoval metodu pomocí třídy testování také dodaný naší profesora, mám NullPointerException, Wich myslím, že se odkazuje na kořeni BST, který byl kdysi instance, ale byl odebrán v místě v testu , a když se opět volá metodu, tak se způsob vrátí null, ne prázdné pole, jak se očekávalo testem:

    (...)

    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());

    (...)

S vědomím, že nemohu změnit návratový typ ani parametry způsobu, co mohu udělat, aby se zabránilo této výjimky? Mohu nějak dostat typu konstrukční části a použít jej k vytvoření instance prázdné pole (Jak to udělat?)?

Nějaké tipy, jak zlepšit svůj kód jsou také vítány.

Položena 30/10/2011 v 21:33
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Otázka zní: Myslíte si opravdu potřebujete k Integer pole vrácena? - Já myslím, že ne.

Předpokládám, že assertArrayEquals()to nebude kontrolovat typu konstrukční části z polí, nýbrž porovnává pouze obsažené hodnoty.

Pomocí kódu, který ukázal, řekl bych, že cokoliv jiného by nebylo možné vzhledem k typu vymazání.

A tak se snaží vrátit Object[]nebo cokoliv super-typu platí ve vašem případě:

return new Object[0];

a

return list.toArray();

(Povinné nekontrolovatelnému obsazení, ale to by mělo být v pořádku)

UPRAVIT:

Ok, tak <K extends Comparable>?
V tomto případě použití:

return new Comparable[0];

a

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

Odpovězeno 30/10/2011 v 22:00
zdroj uživatelem

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