Binært søketre er K [] forhåndsbestilling () metode: om generisk retur

stemmer
0

Gjennomføring Bruk: Data Structure Lab Øvelse for oktober / 28/2011 For å gjøre: Implementere et binært søketre

Problem: K [] retur av metoder preorder (), inorder () og Postorder ()

Problem Detaljer: BST må bare ha sin rot som en parameter. Metodene ovenfor nevnt er blitt beskrevet i et grensesnitt gitt ved vår professor som følgende:

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

Jeg kunne instantiate den generiske array med følgende kode:

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

Men, når jeg testet metoden ved hjelp av en test klasse også levert av vår professor, jeg fikk en NullPointerException, wich jeg tror refererer til roten av BST, som har vært en gang startes, men har blitt fjernet på et punkt i testen og når den kaller metoden igjen, returnerer fremgangsmåten null, ikke en tom matrise som forventet av testen:

    (...)

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

    (...)

Å vite at jeg ikke kan endre returtypen eller parametrene av metoden, hva kan jeg gjøre for å unngå dette unntaket? Kan jeg liksom få komponenttypen og bruke den på å bruke den tomme array (hvordan gikk jeg gjøre dette?)?

Noen tips for å forbedre koden min er også velkomne.

Publisert på 30/10/2011 klokken 20:33
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Spørsmålet er: Vil du virkelig trenger en Integer matrisen som returneres? - Jeg tror ikke det.

Jeg antar assertArrayEquals()betyr ikke finne ut komponenttypen av rekkene, men snarere bare sammenligner de inneholdte verdier.

Med koden du viste, vil jeg si noe annet ville ikke være mulig på grunn av typen sletting.

Så prøv å returnere en Object[]eller hva super-type gjelder i ditt tilfelle:

return new Object[0];

og

return list.toArray();

(Ukontrollert kaster nødvendig, men det bør være ok)

REDIGERE:

Ok, så <K extends Comparable>?
I så fall bruk:

return new Comparable[0];

og

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

Svarte 30/10/2011 kl. 21:00
kilden bruker

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