2012-05-01 16 views
5

, así que actualmente estoy haciendo un ejercicio para la universidad que tiene varias partes opcionales (porque todavía no lo hemos hecho en clase), una de ellas es usar listas en lugar de matrices (por lo que sería de tamaño variable) y otro imprimiendo la lista ordenada por puntos (voy a llegar a eso ahora)Ordene una lista que contenga una clase personalizada

Así que tengo la clase Player.java que se ve así.

public class Player { 
String name; 
String password; 
int chips; 
int points; 
public Player (String n, String pw, int c, int p) { 
    name = n; 
    password = pw; 
    chips = c; 
    points = p; 
} 
public String getName() { 
    return name; 
} 
public void setName (String n) { 
    name = n; 
} 
public void setPW (String pw) { 
    password = pw; 
} 
public String getPW() { 
    return password; 
} 
public void setChips (int c) { 
    chips = c; 
} 
public int getChips() { 
    return chips; 
} 
public void setPoints (int p) { 
    points = p; 
} 
public int getPoints() { 
    return points; 
} 

}

Bastante simple, entonces yo estoy creando una lista con esto (en otra clase):

List<Player> lplayer = new ArrayList<Player>(); 

Adición de jugadores con esto:

lplayer.add(new Player(n,pw,c,p))` 

Y finalmente leyendo sus estadísticas con esto:

public int search_Player (String n) { 
    String name; 
    int i = 0; 
    boolean found = false; 
    while ((i <= tp) && (!found)) { 
     name = lplayer.get(i).getName(); 
     if (name.equals(n)) { 
      found = true; 
     } 
     i++; 
    } 
    return (found == true) ? i-1 : -1; 
} 
public Player show_Player (int i) { 
    return lplayer.get(i); 
} 
public void list_Players() { 
    Collections.sort(lplayer); 
    int i2; 
    if (tp > 0) { // variable which contains number of total players 
     for (int i = 0;i<tp;i++) { 
      i2 = i+1; 
      System.out.println ("\n"+i2+". "+lplayer.get(i).getName()+" [CHIPS: "+lplayer.get(i).getChips()+" - POINTS: "+lplayer.get(i).getPoints()+"]"); 
     } 
    } 
    else { 
     System.out.println ("There are no players yet."); 
    } 
} 

Así que eso es básicamente todo el código. Como puede ver, ya tengo una función list_Players pero solo la imprime en el orden en que se agregó. Necesito una forma de imprimir ordenada por los puntos que tiene cada jugador (básicamente, una clasificación).

Como puede ver, soy bastante nuevo en Java, así que intente no encontrar una forma muy complicada de hacerlo.

Ya lo busqué y encontré cosas como Collections.sort (list) pero supongo que no es lo que necesito aquí.

¡Gracias!

+0

Definitivamente necesitas 'Collections.sort'. Si solo necesita ordenar por puntaje y no por otros criterios, escriba 'public class Player implementa Comparable ' e implemente el método requerido. –

+0

Si necesita comentar cosas simples como 'variable que contiene el número total de jugadores', realmente necesita usar mejores nombres de variable. –

+0

También es muy difícil razonar sobre qué hace un método como 'int search_Player (String n)'. ¿Qué pasa con 'Player getPlayerByName (String name)' (a menos que la tarea especifique explícitamente la firma del método anterior)? –

Respuesta

7

Puede usar la sobrecarga public static <T> void sort(List<T> list, Comparator<? super T> c) en Collections - proporcione el comparador que necesita (puede ser solo una clase anónima) - ¡y ya está listo!

EDIT: This describe cómo funciona el método. En resumen, implementará su llamada como

Collections.sort(list, new Comparator<Player>() { 
    int compare(Player left, Player right) { 
     return left.getPoints() - right.getPoints(); // The order depends on the direction of sorting. 
    } 
}); 

¡Eso es todo!

+1

¿Podrías explicar esto un poco más? Esta es la primera vez que hago algo con listas y todavía me estoy acostumbrando a ellas – zaakun

1

Collections.sort(list) definitivamente podría por una solución para su problema. Es una forma de ordenar tus colecciones proporcionadas por Java. Si estás escribiendo una aplicación del "mundo real" (no un ejercicio para collage) esta sería la forma en que lo haces.

Para que Collections.sort(list) funcione, debe implementar una llamada de interfaz Comparaple. Al implementar esta interfaz, el género sabrá cómo ordenar sus elementos.

Pero debido a que es un ejercicio para el collage, esto es quizás un poco fácil. Si desea (o debe) implementar su propio algoritmo de clasificación, intente primero ordenar una lista común de números (1, 5, 2, 7 ...). Puede extender dicho algoritmo de clasificación fácilmente para sus propias clases.

+0

No tiene que ser complicado. Como dije, aún no hemos hecho esto, las partes opcionales eran solo para personas que estaban un poco más avanzadas en Java. Si de alguna manera funciona con Collections.sort (lista) ¡entonces está bien! – zaakun

Cuestiones relacionadas