In einer Schulaufgabe Ich bin ein Verfahren vervollständigen soll, die ein Array von Knotenelementen in ascendig Ordnung zurückkehren. Die Knoten sind in einem binären Suchbaum zusammengebaut, so sie richtig zu sortieren, ich habe eine Spitze eine rekursive Methode zu erstellen, um die Arbeit zu erledigen.
Das Problem ist, dass diese noch nicht einmal alle Elemente in der Sammlung ergeben nach dem Testausgang (java.lang.AssertionError. ToArray () kehrt nicht alle Elemente in der Sammlung)
Ich konnte nicht mit irgendeiner anderen Weise komme mit dem Array zu tun, und ich bin mir nicht ganz sicher, ob die Rekursion auch funktioniert. Jede Hilfe ist sehr geschätzt. Unten ist mein 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
Testausgang:
java.lang.AssertionError: toArray () kehrt nicht alle Elemente in der Sammlung .: Testperson ( Bender) compareTo (Testperson ( Fry)) == 0 erwartet. wahr, aber war: false bei inf1010.assignment .IfiCollectionTest.assertCompareToEquals (IfiCollectionTest.java:74) bei inf1010.assignment.IfiCollectionTest.assertCompareToEquals (IfiCollectionTest.java:83) bei inf1010.assignment.IfiCollectionTest.assertCompareToEqualsNoOrder (IfiCollectionTest.java:100) bei 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);
}
Ich weiß nicht, ob ich mehr von dem Testcode schreiben sollte, es ist recht umfangreich, und es könnte ein wenig zu viel für einen Beitrag sein?













