En una tarea escolar supone que tengo que completar un método que debe devolver una matriz de elementos de nodo con el fin ascendig. Los nodos están montados en un árbol binario de búsqueda, por lo que ordenarlos correcta, tengo un consejo para crear un método recursivo para hacer el trabajo.
El problema es que esto ni siquiera dió todos los elementos de la colección de acuerdo con la salida de prueba (java.lang.AssertionError:. ToArray () no devuelve todos los elementos de la colección)
No podía llegar a cualquier otra forma de lidiar con la matriz, y no estoy muy seguro de si la recursividad aún funciona. Cualquier ayuda es muy apreciada. A continuación se muestra el código:
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
salida de prueba:
java.lang.AssertionError: toArray () no devuelve todos los elementos de la colección .: TestPerson ( Bender) compareTo (TestPerson ( Fry)) == 0 se esperaba:. cierto, pero era: falsa en inf1010.assignment .IfiCollectionTest.assertCompareToEquals (IfiCollectionTest.java:74) en inf1010.assignment.IfiCollectionTest.assertCompareToEquals (IfiCollectionTest.java:83) en inf1010.assignment.IfiCollectionTest.assertCompareToEqualsNoOrder (IfiCollectionTest.java:100) en 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);
}
No sé si debería publicar más del código de prueba, es bastante extensa, y que podría ser un poco demasiado para un puesto?













