Dans une mission de l'école, je suis censé compléter une méthode qui doit retourner un ensemble d'éléments de nœud dans l'ordre ascendig. Les noeuds sont assemblés dans un arbre binaire de recherche, afin de les trier correctement, je suis une astuce pour créer une méthode récursive pour faire le travail.
Le problème est que ce ne donne pas encore tous les éléments de la collection en fonction de la sortie de test (java.lang.AssertionError:. ToArray () ne retourne pas tous les éléments de la collection)
Je ne pouvais pas trouver une autre façon de traiter le tableau, et je ne suis pas tout à fait sûr si la récursion fonctionne même. Toute aide est très appréciée. Voici mon code:
public class BinarySearchTree<E extends Comparable<E>> implements
IfiCollection<E> {
Node root;
Node current;
int size = 0;
int i = 0;
public class Node {
E obj;
Node left, right;
public Node(E e) {
obj = e;
}
} // END class Node
[...]
public E[] toArray(E[] a) {
Node n = root;
a = sort(n, a);
return a;
}
public E[] sort(Node n, E[] a) { //, int idx, E[] a) {
if (n.left != null) {
current = n.left;
sort(current, a);
}
a[i] = current.obj;
i++;
if (n.right != null) {
current = n.right;
sort(current, a);
}
return a;
} // END public Node sort
[...]
} // END class BinarySearchTree
Sortie test:
java.lang.AssertionError: toArray () ne retourne pas tous les éléments de la collection .: TestPerson ( Bender) compareTo (TestPerson ( Fry)) de == 0 attendu. vrai, mais était: faux à inf1010.assignment .IfiCollectionTest.assertCompareToEquals (IfiCollectionTest.java:74) à inf1010.assignment.IfiCollectionTest.assertCompareToEquals (IfiCollectionTest.java:83) à inf1010.assignment.IfiCollectionTest.assertCompareToEqualsNoOrder (IfiCollectionTest.java:100) à (inf1010.assignment.IfiCollectionTest.toArray IfiCollectionTest.java:202)
protected void assertCompareToEquals(TestPerson actual,
TestPerson expected, String msg) {
assertTrue(actual.compareTo(expected) == 0, String.format( // l:74
%s: %s.compareTo(%s) == 0, msg, actual, expected));
}
[...]
protected void assertCompareToEquals(TestPerson[] actual,
TestPerson[] expected, String msg) {
for (int i = 0; i < actual.length; i++) {
TestPerson a = actual[i];
TestPerson e = expected[i];
assertCompareToEquals(a, e, msg); // l:83
}
}
[...]
protected void assertCompareToEqualsNoOrder(TestPerson[] actual,
TestPerson[] expected, String msg) {
assertEquals(actual.length, expected.length, msg);
TestPerson[] actualElements = new TestPerson[actual.length];
System.arraycopy(actual, 0, actualElements, 0, actual.length);
TestPerson[] expectedElements = new TestPerson[expected.length];
System.arraycopy(expected, 0, expectedElements, 0, expected.length);
Arrays.sort(expectedElements);
Arrays.sort(actualElements);
assertCompareToEquals(actualElements, expectedElements, msg); // l:100
}
[...]
@Test(dependsOnGroups = { collection-core },
description=Tests if method toArray yields all the elements inserted in the collection in sorted order with smallest item first.)
public void toArray() {
TestPerson[] actualElements = c.toArray(new TestPerson[c.size()]);
for (int i = 0; i < actualElements.length; i++) {
assertNotNull(actualElements[i],
toArray() - array element at index + i + is null);
}
TestPerson[] expectedElements = allElementsAsArray();
assertCompareToEqualsNoOrder(actualElements, expectedElements, // l:202
toArray() does not return all the elements in the collection.);
Arrays.sort(expectedElements);
assertCompareToEquals(actualElements, expectedElements,
toArray() does not return the elements in sorted order with
+ the smallest elements first.);
TestPerson[] inArr = new TestPerson[NAMES.length + 1];
inArr[NAMES.length] = new TestPerson(TEMP);
actualElements = c.toArray(inArr);
assertNull(actualElements[NAMES.length],
The the element in the array immediately following the
+ end of the list is not set to null);
}
Je ne sais pas si je devrais poster plus du code de test, il est assez vaste, et il pourrait être un peu trop pour un poste?













