Σε μια σχολική εργασία είμαι υποτίθεται για να ολοκληρωθεί μια μέθοδο που θα πρέπει να επιστρέψει μια σειρά από στοιχεία κόμβου για ascendig. Οι κόμβοι συναρμολογούνται σε ένα δυαδικό δένδρο αναζήτησης, έτσι ώστε να τους ταξινομήσετε σωστά, πήρα μια άκρη για να δημιουργήσετε μια επαναληπτική μέθοδο για να κάνει τη δουλειά.
Το πρόβλημα είναι ότι αυτό δεν καν δώσει όλα τα στοιχεία στη συλλογή σύμφωνα με την έξοδο της δοκιμής (java.lang.AssertionError:. ToArray () δεν επιστρέφει όλα τα στοιχεία στη συλλογή)
Δεν θα μπορούσε να καταλήξει με οποιοδήποτε άλλο τρόπο για να ασχοληθεί με την σειρά, και δεν είμαι σίγουρος αν η αναδρομή λειτουργεί ακόμη. Κάθε βοήθεια είναι πολύ εκτίμησα. Παρακάτω είναι ο κωδικός μου:
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:
java.lang.AssertionError: toArray () δεν επιστρέφει όλα τα στοιχεία στη συλλογή .: TestPerson ( Bender) compareTo (TestPerson ( Fry)) == 0 αναμενόμενο:. αλήθεια, αλλά ήταν: ψευδής σε 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);
}
Δεν ξέρω αν θα πρέπει να δημοσιεύσει περισσότερες του κώδικα δοκιμής, είναι αρκετά εκτεταμένη, και θα μπορούσε να είναι λίγο πάρα πολύ για μία θέση;













