Necesito escribir un método de clasificación para mi proyecto... Es un juego de cartas. Estas son las especificaciones del método.
A continuación se muestra el código que tengo hasta ahora, que funciona pero que necesita manejar nulos y no matrices completas (a mano). Cualquier sugerencia o puntero sería apreciado. Gracias.
public void sortHand(){ // loop over every slot for (int i = 0 ; i < cards.length; i++) { for (int j = i+1 ; j < cards.length; j++) { //getValue returns face value of card if(cards[j].getValue().compareTo(cards[i].getValue()) < 0) { //swap Card temp = cards[i]; cards[i] = cards[j]; cards[j] = temp; } else { isSorted = false; } } } isSorted = true; }Su código no asume ningún número particular de cartas, por lo que ya maneja manos no completas. Allí no se necesita nada.
if(cards[j].getValue().compareTo(cards[i].getValue()) < 0)
Debe manejar los casos en los que las cards[i] o cards[j] son nulas. No desea llamar a .getValue() en un valor nulo; arrojará una NullPointerException .
Hay tres casos a manejar: una carta es nula, la otra es nula, o ambas lo son. Si ambos son nulos, no necesita intercambiar nada. Si uno es nulo pero el otro no, debe decidir si nulo va primero o último. En un caso cambiarás y en el otro no harás nada.
if (cards[i] == null && cards[j] == null) { // no swap } else if (cards[i] == null && cards[j] != null) { // swap if nulls go last, otherwise do nothing } else if (cards[i] != null && cards[j] == null) { // swap if nulls go first, otherwise do nothing } else if (cards[j].getValue().compareTo(cards[i].getValue()) < 0) { ... } Dejo como ejercicio combinar los casos de "intercambio" apropiados en uno solo if se usa || . ¡Ten cuidado! Debe asegurarse de que ninguna tarjeta sea nula antes de llamar a .getValue() . El orden de los cheques es crucial.
else { isSorted = false; }
No hay necesidad de esta cláusula, por cierto. Simplemente establezca isSorted en true al final del método. No necesita establecerlo en false en medio de la clasificación. Nadie va a pasar la bandera mientras clasificas activamente la mano.