In een schoolopdracht ik moet een methode die een array van knooppunt elementen moeten terugkeren in ascendig bestelling af te ronden. De knooppunten worden geassembleerd in een binaire zoekboom, dus om ze te sorteren correct, ik heb een tip om een recursieve methode om het werk te doen maken.
Het probleem is dat alle elementen van de verzameling niet eens bereid volgens testuitgang (java.lang.AssertionError. ToArray () niet alle elementen in de collectie terug)
Ik kon niet komen met een andere manier om te gaan met de serie, en ik ben niet helemaal zeker of de recursie werkt zelfs. Alle hulp wordt zeer gewaardeerd. Hieronder is mijn 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
Test output:
java.lang.AssertionError: toArray () niet alle elementen terug te keren in de collectie .: proefpersoon ( Bender) compareTo (proefpersoon ( Fry)) == 0 verwacht:. true, maar was: vals bij inf1010.assignment .IfiCollectionTest.assertCompareToEquals (IfiCollectionTest.java:74) bij inf1010.assignment.IfiCollectionTest.assertCompareToEquals (IfiCollectionTest.java:83) bij inf1010.assignment.IfiCollectionTest.assertCompareToEqualsNoOrder (IfiCollectionTest.java:100) bij 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);
}
Ik weet niet of ik meer van de test code moet plaatsen, het is vrij uitgebreid, en het misschien een beetje te veel voor een post zijn?













