méthode de recherche binaire Arbre K [] de précommander (): le retour générique

voix
0

Mise en oeuvre Utilisation: Structure des données de laboratoire pour l'exercice Octobre / 28/2011 pour le faire: Mettre en oeuvre un binaire Recherche Arbre

Problème: K [] retour des méthodes pré-commande (), afinde () et postorder ()

Problème Détails: Le BST ne doit avoir sa racine en tant que paramètre. Les méthodes mentionnées ci-dessus ont été décrites dans une interface donnée par notre professeur comme suit:

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

Je pourrais instancier le tableau générique avec le code suivant:

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

Mais, quand je teste la méthode utilisant une classe d'essai a également fourni par notre professeur, je suis un NullPointerException, wich je pense se réfère à la racine du BST, qui a été une fois instancié, mais a été retiré à un moment dans le test et quand il appelle à nouveau la méthode, la méthode renvoie null, pas un tableau vide comme prévu par le test:

    (...)

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

    (...)

Sachant que je ne peux pas changer le type de retour, ni les paramètres de la méthode, ce que je peux faire pour éviter cette exception? Puis-je obtenir en quelque sorte le type de composant et l'utiliser pour instancier le tableau vide (Comment as-je faire cela?)?

Tous les conseils pour améliorer mon code sont également les bienvenus.

Créé 30/10/2011 à 21:33
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Question est: Avez - vous vraiment besoin d' un Integer tableau retourné? - Je ne le pense pas.

Je suppose assertArrayEquals()ne pas vérifier le type de composant des tableaux , mais plutôt à comparer que les valeurs contenues.

Avec le code que vous montriez, je dirais que rien d'autre ne serait pas possible en raison de l'effacement de type.

Donc , essayez de retourner un Object[]ou quel que soit le type super applique dans votre cas:

return new Object[0];

et

return list.toArray();

(Non vérifiées moulages nécessaires, mais cela devrait être ok)

MODIFIER:

Ok, donc <K extends Comparable>?
Dans ce cas , utilisez:

return new Comparable[0];

et

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

Créé 30/10/2011 à 22:00
source utilisateur

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