2012-01-06 25 views
1

這個簡單的遊戲要求玩家人數和他們的名字,並計算他們的分數。我怎樣才能得到最高分的玩家?我如何訪問HashMap中的特定值?

主:

public static void main(String[] args) { 


    Scanner scanner = new Scanner(System.in); 
    HashMap<String,Integer> players= new HashMap<String,Integer>(); 

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

    for(int k=1;k<=numOfPlayers;k++) 
    { 
     System.out.printf("Give the name of player %d: ",k); 
     String nameOfPlayer= scanner.next(); 
     players.put(nameOfPlayer,0);//score=0 
    } 

    //This for finally returns the score 
    for(String name:players.keySet()) 
    { 
      System.out.println("Name of player in this round: "+name); 
      //:::::::::::::::::::::: 
      //:::::::::::::::::::::: 


      int score=players.get(name)+ p.getScore();; 

      //This will update the corresponding entry in HashMap 
      players.put(name,score); 
      System.out.println("The Player "+name+" has "+players.get(name)+" points "); 
    } 
} 

這是我嘗試過自己:

Collection c=players.values(); 
System.out.println(Collections.max(c)); 
+3

你已經有了一個如何遍歷地圖中所有條目的例子,並獲得每個玩家的分數。你不知道如何做數字比較?你有什麼嘗試過自己? – 2012-01-06 14:59:09

+0

p.getScore()是做什麼的? – 2012-01-06 15:03:41

回答

1

您可以使用Collections.max()獲得HashMap的條目由HashMap.entrySet()定製的比較對於所得到的集合的最大值比較值。

例子:

HashMap<String,Integer> players= new HashMap<String,Integer>(); 
    players.put("as", 10); 
    players.put("a", 12); 
    players.put("s", 13); 
    players.put("asa", 15); 
    players.put("asaasd", 256); 
    players.put("asasda", 15); 
    players.put("asaws", 5); 
    System.out.println(Collections.max(players.entrySet(),new Comparator<Entry<String, Integer>>() { 
     @Override 
     public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { 
      return o1.getValue().compareTo(o2.getValue()); 
     } 
    })); 

可以修改上面的代碼以更好地滿足您的條件。

+0

哪一個會讓你獲得最高分,但不是得分最高的玩家。如果你想使用'Collections.max()',你需要在'entrySet()'而不是'values()'上執行,你需要編寫一個自定義比較器。 – 2012-01-06 15:00:18

+0

@MarkPeters:沒有看到OP要玩家的名字。 – 2012-01-06 15:02:18

+0

@MarkPeters:現在我認爲答案是禮儀。 – 2012-01-06 15:12:21