如何迭代Hashmap中的元素? [英] How can I iterate over the elements in Hashmap?

查看:106
本文介绍了如何迭代Hashmap中的元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想制作一款Java游戏。首先,程序会询问玩家的数量;之后,它要求他们的名字。我将他们的名字放在 HashMap 中,并带有ID和他们的分数。在游戏结束时,我计算得分,我想把它放在 HashMap (特定名称的具体分数)。有谁知道如何做到这一点?这是我的代码:

I want to make a Java game. At first the program asks for the number of the players; after that, it asks for their names. I put their names in a HashMap with an ID and their score. At the end of the game I count the score and I want to put it in the HashMap (the specific score for the specific name). Does anyone know how to do this? This is my code:

玩家:

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

main:

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

      }

有谁知道我怎么能最终打印例如:

Does anyone know how can I finally print for example:

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

更新:

我在main中做了这个(如Jigar Joshi建议的那样)

I did this in main(as Jigar Joshi suggest)

 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名称:当我把两个玩家的名字a和b。我认为问题在这里

and it prints "Score :0 Name : a Score :4 Name : a" when i put two names of players "a" and "b".I think the problem is here

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

如何将名称放在我以前的的names_of_players中? / code>?

How can I put the names in "names_of_players" of my previous for?

推荐答案

需要钥匙&迭代中的值



使用 entrySet() 迭代地图并且需要访问值和键:

Need Key & Value in Iteration

Use entrySet() to iterate through Map and need to access value and key:

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());

}



迭代需要密钥



如果您只想迭代地图的,可以使用 keySet()

Need Key in Iteration

If you want just to iterate over keys of map you can use keySet()

for(String key: map.keySet()) {
     Person value = map.get(key); 
}



迭代需要值



如果您只想迭代地图的,可以使用 values()

Need Value in Iteration

If you just want to iterate over values of map you can use values()

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

}

这篇关于如何迭代Hashmap中的元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆