2012-05-01 36 views
5

, więc obecnie robię ćwiczenie na studia, które ma kilka opcjonalnych części (ponieważ nie zrobiliśmy tego jeszcze na lekcji), jednym z nich jest używanie list zamiast tablic (więc będzie to zmienny rozmiar), a drugi drukuje listę posortowaną według punktów (dojdę teraz do tego)Posortuj listę zawierającą niestandardową klasę

Mam więc klasę Player.java, która wygląda tak.

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; 
} 

}

Całkiem proste, potem tworzę listę z tym (w innej klasie):

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

dodaje graczy z tym:

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

I wreszcie czytając ich statystyki:

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."); 
    } 
} 

To w zasadzie cały kod. Jak widać, mam już funkcję list_Players, ale po prostu drukuje ją w kolejności, w jakiej została dodana. Potrzebuję sposobu na wydrukowanie posortowane według punktów, które ma każdy gracz (czyli w zasadzie ranking).

Jak widać, jestem całkiem nowy dla java, więc proszę, nie próbuj wymyślić bardzo skomplikowanego sposobu robienia tego.

Już szukałem tego i znalazłem takie rzeczy jak Collections.sort (list), ale myślę, że to nie jest to, czego potrzebuję tutaj.

Dziękujemy!

+0

Zdecydowanie potrzebujesz 'Collections.sort'. Jeśli potrzebujesz tylko sortować według wyniku, a nie innych kryteriów, wpisz "public class Player implements Comparable " i wprowadź wymaganą metodę. –

+0

Jeśli chcesz skomentować proste rzeczy, takie jak "zmienna, która zawiera liczbę wszystkich graczy", naprawdę musisz użyć lepszych nazw zmiennych. –

+0

Bardzo trudno jest zrozumieć, jak działa metoda 'int search_Player (String n)'. A co powiesz na 'Player getPlayerByName (nazwa ciągu)' (chyba, że ​​poprzednia sygnatura metody jest wyraźnie wymagana przez zadanie)? –

Odpowiedz

7

Możesz użyć przeciążenia public static <T> void sort(List<T> list, Comparator<? super T> c) w Collections - podaj potrzebny komparator (może to być tylko anonimowa klasa) - i wszystko gotowe!

EDIT: This opisuje jak działa metoda. Krótko mówiąc, zaimplementujesz swoje połączenie jako

To wszystko!

+1

Czy mógłbyś rozwinąć to trochę więcej? Po raz pierwszy robię coś z listami i nadal się do nich przyzwyczaję. – zaakun

1

Collections.sort(list) może zdecydowanie rozwiązać twój problem. Jest to sposób na sortowanie kolekcji dostarczanych przez Javę. Jeśli piszesz aplikację "prawdziwego świata" (a nie ćwiczenie kolażu), to tak właśnie robisz.

Aby umożliwić działanie Collections.sort(list), należy zaimplementować wywołanie interfejsu Comparaple. Implementując ten interfejs, sort będzie wiedział, jak zamówić elementy.

Ale ponieważ jest to ćwiczenie do kolażu, może trochę łatwiej. Jeśli chcesz (lub musisz) wdrożyć własny algorytm sortowania, spróbuj najpierw posortować wspólną listę liczb (1, 5, 2, 7 ...). Możesz łatwo rozszerzyć taki algorytm sortowania dla własnych klas.

+0

To nie musi być skomplikowane. Jak już powiedziałem, nie zrobiliśmy tego jeszcze, opcjonalne części były przeznaczone tylko dla osób nieco bardziej zaawansowanych w Javie. Jeśli w jakiś sposób działa z Collections.sort (list), to w porządku! – zaakun

Powiązane problemy