Saya ingin membuat game Java. Mula-mula program meminta jumlah pemain; setelah itu, program meminta nama-nama mereka. Saya menaruh nama-nama mereka dalam sebuah HashMap
dengan ID dan skor mereka. Di akhir permainan saya menghitung skor dan saya ingin memasukkannya ke dalam HashMap
(skor spesifik untuk nama tertentu). Apakah ada yang tahu bagaimana melakukan ini? Ini adalah kode saya:
Pemain:
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;
}
utama:
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");
}
Apakah ada yang tahu bagaimana saya akhirnya bisa mencetak misalnya:
"The player Nick has 10 points.
The player Mary has 0 points."
Update:
Saya melakukan ini di utama (seperti yang disarankan 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());
}
dan mencetak "Skor :0 Nama : a Skor :4 Nama : a" ketika saya menaruh dua nama pemain "a" dan "b" Saya pikir masalahnya ada di sini
name.put(k,new Player(name1.getName(),scr));
Bagaimana saya bisa meletakkan nama-nama di "names_of_players" dari for
saya sebelumnya?
Gunakan entrySet()
untuk mengiterasi melalui Map
dan perlu mengakses nilai dan kunci:
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());
}
Jika Anda hanya ingin mengiterasi kunci
dari peta, Anda dapat menggunakan keySet()
for(String key: map.keySet()) {
Person value = map.get(key);
}
Jika Anda hanya ingin mengiterasi nilai
dari peta, Anda dapat menggunakan nilai()
for(Person person: map.values()) {
}
Anda tidak boleh memetakan skor ke pemain. Anda harus memetakan pemain (atau namanya) ke skor:
Map<Player, Integer> player2score = new HashMap<Player, Integer>();
Kemudian tambahkan pemain ke peta: int score = .... Pemain pemain = Pemain baru(); player.setName("John"); // dll. player2score.put(player, score);
Dalam hal ini tugasnya sepele:
int score = player2score.get(player);
Karena semua pemain diberi nomor, saya hanya akan menggunakan ArrayList<Player>()
Sesuatu seperti
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());