2012-07-19 213 views
-1

我有一類玩家返回字符串

public Player (String name, int num) { 
    name = name; 
    num= num; 
} 

// getter和setter

那麼我將有球員名單

List<Player> listPlayers = new ArrayList<Player>(); 

我需要製作一個返回玩家名稱的方法

String getPlayerName(int num){ 
    ... 
} 

我可以使該方法看到所有列表,但我想以更高效的方式執行此操作。 有人可以給我一些提示嗎?

感謝您的幫助。

+0

一個類的方法? – 2012-07-19 10:48:48

+0

你應該嘗試更清楚地闡述你的問題。例如,這不是你發佈的類,而是一個構造函數。另外,你的最後一句話(「我做這個方法......」)幾乎是不可讀的......我們都得到你想要的東西(或許^^),但問題並不清楚。 – brimborium 2012-07-19 10:58:28

+0

以及答案類型是最糟糕的,根本沒有答案。 我不是英語母語的對不起。 我知道這是構造函數只是一個例子,我認爲幫助理解的其他人! – rgomes 2012-07-19 12:56:37

回答

3

使用Map<Integer, Player>來存儲所有玩家。通過從地圖獲取一個球員他num會很efficent:

map.get(num); 
+0

謝謝!它正是我需要的。 – rgomes 2012-07-19 12:54:43

1

如果你已經只有得到了名單,沒有什麼可以做的,比遍歷列表更有效率,找到具有正確數字的球員並返回名稱。

我會忍不住改變方法,只是

public Player getPlayerByNumber(int num) 

不過,讓來電者隨後得到名字。如果您稍後想要獲取其他值,它會更加靈活。

如果您願意更改數據結構,則可以使用Map<Integer, Player>而不是列表 - 類似於HashMap之類的內容將允許高效的訪問。如果您需要保留廣告訂單,則需要使用LinkedHashMap,但這可能不是必需的。

0

好吧,如果你想根據他的號返回的球員,「正確」的數據結構將是一個地圖,那麼你'使用playerMap.get(playerNumber)來獲取與該號碼對應的播放器。

0
String getPlayerName(int num) { 

for(Player player:listPlayers) { 
    if(player.getNum() == num) { 
    return player.getName(); 
    } 
} 
return null; 
} 
+0

int不是一個對象,所以你不能使用等於 – 2012-07-19 10:51:35

+0

謝謝。編輯答案 – 2012-07-19 10:54:32

+0

歡迎您 – 2012-07-19 10:57:42

0

試試這個..

public String getPlayerName(int num){ 

    for (Player p : listPlayers){ 

      if (p.getNum()==num){ 

       return p.getName(); 
       break(); 
      } 


    } 

      return null; 

} 

爲了更好的辦法利用收集諸如地圖取而代之的是ArrayList<Player>

+0

爲什麼在退貨後中斷?如果你指定一個不存在的數字會發生什麼? – 2012-07-19 10:52:05

+0

循環結束後,如果找不到與空值匹配的方法 – 2012-07-19 10:53:02

0

你可以有一個Map<Integer, Player>,那麼你可以將播放器使用訪問num

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

// fill in your players with the following line 
listPlayerList.add(player.getNum(), player); 

// remove a player 
listPlayer.remove(player.getNum(); 

// get player with specific num 
Player p = listPlayer.get(num); 
String name = p.getName(); 

// iterate over players 
for (Player p: listPlayer.values()) { 
    doStuffWith(p); 
} 

如果您不能將ArrayList更改爲Map,那麼您運氣不好,必須遍歷您的ArrayList並檢查每個條目的num