Подтвердить что ты не робот

Как я могу перебирать элементы в Hashmap?

Я хочу создать Java-игру. Сначала программа запрашивает количество игроков; после этого он просит их имена. Я помещал их имена в 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."  

Update:

Я сделал это в основном (как предлагает Jigar Joshi)

 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 Имя: a Оценка: 4 Название: a", когда я добавляю два имени игроков "a" и "b". Я думаю, что проблема здесь

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

Как я могу поместить имена в "names_of_players" моего предыдущего for?

4b9b3361

Ответ 1

Необходимый ключ и значение в итерации

Используйте 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()

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

Необходимая ценность при итерации

Если вы хотите просто перебрать values карты, вы можете использовать values()

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

}

Ответ 2

Вам не следует сопоставлять счет игроку. Вы должны сопоставить игрока (или его имя) для оценки:

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

Затем добавьте игроков для отображения: int score =.... Игрок игрока = новый игрок(); player.setName( "John" ); // и т.д. player2score.put(игрок, оценка);

В этом случае задача тривиальна:

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

Ответ 4

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

Вы можете использовать этот код для печати всех результатов в вашем формате.