2012-05-01 18 views
5

वाली एक सूची को सॉर्ट करें, इसलिए मैं वर्तमान में कॉलेज के लिए एक अभ्यास कर रहा हूं जिसमें कई वैकल्पिक भाग हैं (क्योंकि हमने अभी तक कक्षा में ऐसा नहीं किया है), उनमें से एक सरणी के बजाय सूचियों का उपयोग करना है (तो यह परिवर्तनीय आकार होगा) और कोई अन्य बिंदुओं द्वारा क्रमबद्ध सूची प्रिंट कर रहा है (मुझे अब मिल जाएगा)एक कस्टम श्रेणी

तो, मेरे पास प्लेयर.जावा क्लास है जो इस तरह दिखता है।

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

तो यह मूल रूप से सभी कोड है। जैसा कि आप देख सकते हैं कि मेरे पास पहले से ही एक सूची_Players फ़ंक्शन है लेकिन यह इसे उस क्रम में प्रिंट करता है जो इसे जोड़ा गया था। मुझे प्रत्येक खिलाड़ी के अंक से क्रमबद्ध करने के लिए एक तरीका चाहिए (इसलिए मूल रूप से एक रैंकिंग)।

जैसा कि आप देख सकते हैं कि मैं जावा के लिए बहुत नया हूं इसलिए कृपया इसे करने के एक बहुत ही जटिल तरीके से आने की कोशिश न करें।

मैंने पहले से ही इसकी खोज की है और Collections.sort (सूची) जैसी चीजें पाई हैं, लेकिन मुझे लगता है कि मुझे वही नहीं चाहिए जो मुझे चाहिए।

धन्यवाद!

+0

आपको निश्चित रूप से 'संग्रह .sort' की आवश्यकता है। यदि आपको केवल स्कोर द्वारा सॉर्ट करने की आवश्यकता है और कोई अन्य मानदंड नहीं है, तो 'पब्लिक क्लास प्लेयर' तुलनात्मक 'लागू करें और आवश्यक विधि लागू करें। –

+0

यदि आपको 'वेरिएबल जैसी सरल चीज़ों पर टिप्पणी करने की आवश्यकता है जिसमें कुल खिलाड़ियों की संख्या शामिल है' तो आपको वास्तव में बेहतर चर नामों का उपयोग करने की आवश्यकता है। –

+0

'int search_Player (स्ट्रिंग एन)' जैसी विधि के बारे में तर्क करना भी बहुत मुश्किल है। 'प्लेयर getPlayerByName (स्ट्रिंग नाम)' के बारे में क्या (जब तक कि पूर्व विधि हस्ताक्षर असाइनमेंट द्वारा स्पष्ट रूप से नहीं पूछा जाता है)? –

उत्तर

7

Collections में public 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) निश्चित रूप से आपकी समस्या के समाधान के द्वारा हो सकता है। यह जावा द्वारा प्रदान किए गए आपके संग्रह को सॉर्ट करने का एक तरीका है। यदि आप एक "असली दुनिया" आवेदन लिख रहे हैं (कोलाज के लिए व्यायाम नहीं) तो यह वही तरीका होगा जो आप कर रहे हैं।

Collections.sort(list) काम करने के लिए, आपको एक इंटरफेस कॉल Comparaple लागू करना होगा। इस इंटरफ़ेस को कार्यान्वित करके, सॉर्ट आपके तत्वों को ऑर्डर करने के बारे में जानेंगे।

लेकिन क्योंकि यह कोलाज के लिए एक अभ्यास है, यह शायद आसान है। यदि आप अपने सॉर्टिंग एल्गोरिदम को लागू करना चाहते हैं (या आवश्यक), संख्याओं की एक सामान्य सूची क्रमबद्ध करने के लिए पहले प्रयास करें (1, 5, 2, 7 ...)। आप अपने स्वयं के वर्गों के लिए आसानी से इस तरह के एक सॉर्टिंग एल्गोरिदम का विस्तार कर सकते हैं।

+0

इसे जटिल नहीं होना चाहिए। जैसा कि मैंने कहा, हमने अभी तक यह नहीं किया है, वैकल्पिक भाग सिर्फ उन लोगों के लिए थे जो जावा में थोड़ी अधिक उन्नत थे। अगर यह किसी भी तरह Collections.sort (सूची) के साथ काम करता है तो यह ठीक है! – zaakun