2011-12-27 6 views
25

मैं जावा गेम बनाना चाहता हूं। सबसे पहले कार्यक्रम खिलाड़ियों की संख्या के लिए पूछता है; उसके बाद, यह उनके नाम पूछता है। मैंने उनके नाम HashMap में आईडी और उनके स्कोर के साथ रखा है। खेल के अंत में मैं स्कोर गिनता हूं और मैं इसे HashMap (विशिष्ट नाम के लिए विशिष्ट स्कोर) में रखना चाहता हूं। क्या किसी को भी यह करना आता है? यह मेरा कोड है:मैं हैशमैप में तत्वों को कैसे पुन: सक्रिय कर सकता हूं?

प्लेयर:

public class Player { 

public Player() { 
} 

public void setScore(int score) { 
    this.score = score; 
} 

public void setName(String name) { 
    this.name = name; 
} 

private String name; 
private int score; 

public Player(String name, int score) { 
    this.name = name; 
    this.score = score; 
} 
public String getName() { 
    return name; 
} 

@Override 
public String toString() { 
    return "Player{" + "name=" + name + "score=" + score + '}'; 
} 

public int getScore() { 
    return score; 
} 

मुख्य:

Scanner scanner = new Scanner(System.in); 
HashMap<Integer,Player> name= new HashMap<Integer,Player>(); 

    System.out.printf("Give the number of the players "); 
    int number_of_players = scanner.nextInt(); 


    for(int k=1;k<=number_of_players;k++) 
    { 


     System.out.printf("Give the name of player %d: ",k); 
     name_of_players= scanner.nextLine(); 
     name.put(k, new Player(name_of_players,0));//k=id and 0=score 

    } 


    //This for finally returns the score and   
    for(int k=1;k<=number_of_players;k++) 
    { 
     Player name1 = name.get(k); 
    System.out.print("Name of player in this round:"+name1.getName()); 
    .............. 
    ............. 
    int score=p.getScore(); 
    name.put(k,new Player(name1.getName(),scr));//I think here is the problem 

    for(int n=1;n<=number_of_players;n++)//prints all the players with their score 
     { 

    System.out.print("The player"+name1.getName()+" has "+name1.getScore()+"points"); 

     } 

क्या किसी को पता है कि मैं अंत में उदाहरण के लिए मुद्रित कर सकते हैं कैसे:

"The player Nick has 10 points. 
The player Mary has 0 points." 

अद्यतन:

मैं मुख्य में ऐसा किया (जिगर जोशी का सुझाव के रूप में)

name.put(k,new Player(name1.getName(),scr)); 
Set<Map.Entry<Integer, Player>> set = name.entrySet(); 

for (Map.Entry<Integer, Player> me : set) 
{ 
System.out.println("Score :"+me.getValue().getScore() +" Name:"+me.getValue().getName()); 

} 

और यह प्रिंट "स्कोर: 0 नाम: एक स्कोर: 4 नाम: एक" जब मैं खिलाड़ियों की दो नाम डाल "एक" और "बी" मुझे लगता है कि समस्या यहाँ है

name.put(k,new Player(name1.getName(),scr)); 

मैं अपने पिछले for की "names_of_players" में नाम रख सकते हैं?

उत्तर

49

आवश्यकता पुनरावृत्ति में कुंजी & मूल्य

उपयोग entrySet()Map के माध्यम से पुनरावृति और उपयोग करने के लिए मूल्य और कुंजी की आवश्यकता करने के लिए:

Map<String, Person> hm = new HashMap<String, Person>(); 

hm.put("A", new Person("p1")); 
hm.put("B", new Person("p2")); 
hm.put("C", new Person("p3")); 
hm.put("D", new Person("p4")); 
hm.put("E", new Person("p5")); 

Set<Map.Entry<String, Person>> set = hm.entrySet(); 

for (Map.Entry<String, Person> me : set) { 
    System.out.println("Key :"+me.getKey() +" Name : "+ me.getValue().getName()+"Age :"+me.getValue().getAge()); 

} 
कुंजी

की आवश्यकता में पुनरावृत्ति

तुम सिर्फ अधिक पुनरावृति करना चाहते हैं keys मानचित्र का उपयोग आप keySet()

का उपयोग कर सकते हैं

आवश्यकता मूल्य पुनरावृत्ति

तुम सिर्फ नक्शे के values से अधिक पुनरावृति करना चाहते हैं आप values()

for(Person person: map.values()) { 

} 
+1

+1: या 'एंट्रीसेट() ';) –

+4

+1 एंट्रीसेट() उचित है यदि आपको दोनों कुंजी और मूल्य की आवश्यकता है। इसके अलावा आप केवल मूल्यों (या कुंजी) पर सीधे पुनरावृत्त कर सकते हैं। – viktor

+0

@viktor अच्छा बिंदु। बढ़ाया उत्तर –

3

उपयोग कर सकते हैं आप खिलाड़ी के लिए स्कोर मैप नहीं करना चाहिए। आप स्कोर करने के लिए खिलाड़ी (या उसका नाम) को मैप करना चाहिए:

Map<Player, Integer> player2score = new HashMap<Player, Integer>();

फिर मैप करने के लिए खिलाड़ियों को शामिल करें: पूर्णांक स्कोर = .... प्लेयर खिलाड़ी = नए प्लेयर(); player.setName ("जॉन"); // आदि player2score।रखो (खिलाड़ी, स्कोर);

इस मामले में काम तुच्छ है:

int score = player2score.get(player);

3

के बाद से सभी खिलाड़ियों गिने जा रहे हैं मैं सिर्फ एक ArrayList<Player>()

कुछ

तरह
List<Player> players = new ArrayList<Player>(); 

System.out.printf("Give the number of the players "); 
int number_of_players = scanner.nextInt(); 
scanner.nextLine(); // discard the rest of the line. 

for(int k = 0;k < number_of_players; k++){ 
    System.out.printf("Give the name of player %d: ", k + 1); 
    String name_of_player = scanner.nextLine(); 
    players.add(new Player(name_of_player,0)); //k=id and 0=score 
} 

for(Player player: players) { 
    System.out.println("Name of player in this round:" + player.getName()); 
1
HashMap<Integer,Player> hash = new HashMap<Integer,Player>(); 
Set keys = hash.keySet(); 
Iterator itr = keys.iterator(); 

while(itr.hasNext()){ 
    Integer key = itr.next(); 
    Player objPlayer = (Player) hash.get(key); 
    System.out.println("The player "+objPlayer.getName()+" has "+objPlayer.getScore()+" points"); 
} 

का प्रयोग करेंगे आप अपने कोड में सभी स्कोर प्रिंट करने के लिए इस कोड का उपयोग कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे