2012-05-01 41 views
5

vì vậy tôi hiện đang thực hiện một bài tập cho trường đại học có một số phần tùy chọn (vì chúng tôi chưa thực hiện điều này trong lớp), một trong số đó là sử dụng danh sách thay vì mảng (do đó, nó sẽ có kích thước biến đổi) và một danh sách in khác được sắp xếp theo các điểm (tôi sẽ đến đó ngay bây giờ)Sắp xếp danh sách chứa lớp tùy chỉnh

Vì vậy, tôi có lớp Player.java giống như thế này.

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

}

Khá đơn giản, sau đó tôi là tạo ra một danh sách với điều này (trong lớp khác):

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

Thêm người chơi với điều này:

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

Và cuối cùng đọc số liệu thống kê của họ với điều này:

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

Vì vậy, về cơ bản là tất cả mã. Như bạn có thể thấy tôi đã có một hàm list_Players nhưng nó chỉ in nó theo thứ tự nó được thêm vào. Tôi cần một cách để in được sắp xếp theo các điểm mà mỗi người chơi có (về cơ bản là một thứ hạng).

Như bạn có thể thấy tôi khá mới với java vì vậy hãy cố gắng không đưa ra một cách rất phức tạp để làm điều đó.

Tôi đã tìm kiếm và tìm thấy những thứ như Collections.sort (danh sách) nhưng tôi đoán đó không phải là những gì tôi cần ngay tại đây.

Cảm ơn bạn!

+0

Bạn chắc chắn cần 'Bộ sưu tập.sort'. Nếu bạn chỉ cần sắp xếp theo điểm số và không phải bất kỳ tiêu chí nào khác, thì hãy viết 'public class Player thực hiện Comparable ' và thực hiện phương thức cần thiết. –

+0

Nếu bạn cần phải bình luận những điều đơn giản như 'biến chứa số lượng tổng số người chơi' bạn thực sự cần phải sử dụng tên biến tốt hơn. –

+0

Nó cũng rất khó để lý luận về những gì một phương pháp như 'int search_Player (String n)' nào. Điều gì về 'Player getPlayerByName (String name)' (trừ khi chữ ký phương thức cũ được yêu cầu một cách rõ ràng bởi việc gán)? –

Trả lời

7

Bạn có thể sử dụng quá tải public static <T> void sort(List<T> list, Comparator<? super T> c) trong Collections - cung cấp bộ so sánh bạn cần (có thể chỉ là một lớp ẩn danh) - và bạn đã sẵn sàng!

EDIT: This mô tả cách thức hoạt động của phương thức. Tóm lại, bạn sẽ thực hiện cuộc gọi của mình dưới dạng

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

Đúng vậy!

+1

Bạn có thể giải thích thêm một chút về điều này không? Đây là lần đầu tiên tôi làm điều gì đó với danh sách và tôi vẫn quen với họ – zaakun

1

Collections.sort(list) chắc chắn có thể là giải pháp cho vấn đề của bạn. Đó là một cách để sắp xếp các bộ sưu tập của bạn được cung cấp bởi Java. Nếu bạn đang viết một ứng dụng "thế giới thực" (không phải là một bài tập để cắt dán), đây sẽ là cách bạn làm nó.

Để cho phép Collections.sort(list) hoạt động, bạn phải triển khai cuộc gọi giao diện Comparaple. Bằng cách triển khai giao diện này, sắp xếp sẽ biết cách sắp xếp các phần tử của bạn.

Nhưng vì đó là một bài tập để cắt dán, điều này có lẽ là một chút dễ dàng. Nếu bạn muốn (hoặc phải) triển khai thuật toán phân loại của riêng bạn, trước hết hãy thử sắp xếp một danh sách các số chung (1, 5, 2, 7 ...). Bạn có thể mở rộng thuật toán sắp xếp như vậy một cách dễ dàng cho các lớp của riêng bạn.

+0

Nó không phải phức tạp. Như tôi đã nói, chúng tôi chưa thực hiện điều này, các phần tùy chọn chỉ dành cho những người đã nâng cao hơn một chút trong java. Nếu nó bằng cách nào đó làm việc với Collections.sort (danh sách) thì đó là tốt! – zaakun

Các vấn đề liên quan