2012-05-01 2 views
5

그래서 현재 여러 옵션 부분을 가진 대학을위한 연습을하고 있습니다 (아직 클래스에서이 작업을 수행하지 않았기 때문에 배열 대신 목록을 사용하고 있습니다) 그래서 가변 크기가 될 것입니다.) 그리고 포인트별로 정렬 된 목록을 인쇄하는 또 다른 하나 (이제 알게 될 것입니다)사용자 정의 클래스를 포함하는 목록을 정렬하십시오

그래서 저는 Player.java 클래스를 가지고 있습니다.

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

}

매우 간단하고 내가 (다른 클래스)이있는 목록 만드는거야이와

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

추가 플레이어 :

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

을 그리고 마지막으로이 통계를 읽는 중 :

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

기본적으로 모든 코드입니다. 당신이 볼 수 있듯이 나는 이미 list_Players 함수를 가지고 있지만 추가 된 순서대로 출력한다. 각 플레이어의 포인트별로 정렬하여 인쇄하는 방법이 필요합니다 (기본적으로 순위 지정).

제가 알기로 저는 꽤 자바에 익숙하지 않으므로 그렇게하기 매우 복잡한 방법을 생각해 내지 말아주세요.

필자는 이미 그것을 검색하여 Collections.sort (list)와 같은 것을 찾았지만, 지금 당장 필요한 것은 아니라고 생각합니다.

감사합니다.

+0

확실히'Collections.sort'가 필요합니다. 다른 기준이 아닌 점수별로 정렬 만하면되고,'public class Player implements Comparable '이라고 쓰고 필요한 메소드를 구현하십시오. –

+0

'총 선수 수를 포함하는 변수'와 같은 간단한 것을 언급해야한다면 더 나은 변수 이름을 사용해야합니다. –

+0

'int search_Player (String n)'과 같은 메소드가 어떤 일을하는지에 대해서도 생각해 내기가 매우 어렵습니다. 'Player getPlayerByName (String name)'(이전 메소드 서명이 할당에 의해 명시 적으로 요구되지 않는 한)은 어떻습니까? –

답변

7

Collectionspublic static <T> void sort(List<T> list, Comparator<? super T> c) 오버로드를 사용할 수 있습니다. 필요한 비교기 (익명의 클래스 일 수 있음)를 제공하면 모든 설정이 완료됩니다!

편집는 : 메소드가 어떻게 작동하는지 This 설명합니다. 요약하면 전화 번호는

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

으로 구현됩니다.

+1

좀 더 자세히 설명해 주시겠습니까? 목록으로 무엇인가를하는 것은 이번이 처음이며, 아직 익숙해 져 있습니다. – zaakun

1

Collections.sort(list) 귀하의 문제에 대한 해결책으로 확실히 할 수 있습니다. Java에서 제공하는 컬렉션을 정렬하는 방법입니다. "실제 응용"(콜라주를위한 연습이 아니라)을 쓰고 있다면 이것은 당신이하는 방식 일 것입니다.

Collections.sort(list)을 작동 시키려면 Comparaple이라는 인터페이스 호출을 구현해야합니다. 이 인터페이스를 구현하면 정렬을 통해 요소 순서를 알 수 있습니다.

하지만 콜라주를 연습하기 때문에 약간 쉬울 것입니다. 자신에게 맞는 정렬 알고리즘을 구현하려면 (또는 반드시) 숫자 (1, 5, 2, 7 ...)의 공통 목록을 정렬하십시오. 자신의 클래스에 대해 이러한 정렬 알고리즘을 쉽게 확장 할 수 있습니다.

+0

복잡하지 않아도됩니다. 내가 말했듯이, 우리는 아직 이것을하지 않았습니다. 옵션 파트는 자바에서 좀 더 진보 된 사람들을위한 것입니다. 그것이 Collections.sort (list)와 어떻게 든 작동한다면 괜찮습니다! – zaakun

관련 문제