2011-12-27 33 views
25

Tôi muốn tạo một trò chơi Java. Lúc đầu chương trình yêu cầu số lượng người chơi; sau đó, nó yêu cầu tên của họ. Tôi đặt tên của họ trong một số HashMap với một ID và điểm số của họ. Vào cuối trò chơi tôi đếm số điểm và tôi muốn đặt nó trong số HashMap (điểm cụ thể cho tên cụ thể). Có ai biết cách để làm điều này không? Đây là mã của tôi:Làm cách nào tôi có thể lặp qua các phần tử trong Hashmap?

Player:

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

chính:

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

     } 

Có ai biết làm thế nào tôi có thể cuối cùng in ví dụ:

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

Cập nhật:

Tôi đã làm điều này trong main (như Jigar Joshi đề nghị)

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

} 

và nó in "Điểm: 0 Tên: Điểm: 4 Tên: a" khi tôi đặt hai tên người chơi "a" và "b" .Tôi nghĩ rằng vấn đề là ở đây

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

Làm thế nào tôi có thể đặt tên trong "names_of_players" của trước for của tôi?

Trả lời

49

Cần chính & giá trị trong Iteration

Sử dụng entrySet() để lặp qua Map và cần phải truy cập giá trị và quan trọng:

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

} 

Cần chính trong Iteration

Nếu bạn muốn chỉ để lặp qua keys bản đồ bạn có thể sử dụng keySet()

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

Cần Value trong Iteration

Nếu bạn chỉ muốn để lặp qua values của bản đồ mà bạn có thể sử dụng values()

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

} 
+1

+1: hoặc 'entrySet()';) –

+4

+1 entrySet() là hợp lý nếu bạn cần cả khóa và giá trị. Ngoài ra, bạn có thể lặp trực tiếp qua các giá trị (hoặc các khóa). – viktor

+0

@viktor điểm tốt đẹp. câu trả lời nâng cao –

3

Bạn không nên lập bản đồ điểm để người chơi. Bạn nên đồ chơi (hoặc tên của mình) ghi bàn:

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

Sau đó thêm người chơi để lập bản đồ: điểm int = .... chơi máy nghe nhạc = new Player(); player.setName ("John"); // v.v. player2score.đặt (người chơi, điểm số);

Trong trường hợp này nhiệm vụ là tầm thường:

int score = player2score.get(player);

3

Vì tất cả các cầu thủ được đánh số tôi sẽ chỉ sử dụng một ArrayList<Player>()

Something như

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

Bạn có thể sử dụng mã này để in tất cả các điểm trong định dạng của bạn.

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