簡體   English   中英

如何尋址/訪問動態創建的對象?

[英]How to address / access dynamicly created Objects?

我嘗試解決動態創建的對象通過方法獲取值。 我動態地創建了對象,並使用了一個包含對象名的ArrayList。 我的ArrayList被稱為arraylist,List的值由users-input(Scanner)創建。值為fe(“Mike”,“Nick”,“John”)。

我的班級“玩家”:

public class Player {

    String playerName = "Player";
    int counter1 = 20;
    int counter2 = 50;

    public String get_playerName(){
        return playerName;
    }    
    public int get_counter1(){
        return counter1;
    }    
    public int get_counter2(){
        return counter2;
    }    


    public Player(String Name){
    playerName = Name;
    }

}

這是我動態創建對象的地方:

int playersCount = arraylist.size(); //Size of ArrayList with Players names

//create Players dynamicly
for(int i = 0; i < playersCount; i++){
     Player playerName = new Player(arraylist.get(i));
}

如何從Player-Class獲得特定的Player-Value(fe:讓我們說,John正在移動中,通過get_counter1()來獲取他的counter1)如何解決特定的Player-Object?

非常感謝大家的回答!

邁克爾

您需要將玩家存儲在Map中,該Map將玩家名稱映射到玩家對象。

    HashMap<String, Player> mp = new HashMap<String, Player>();
    for(int i = 0; i < playersCount; i++){
           Player player = new Player(arraylist.get(i));
           mp.put(arraylist.get(i), player);
    }


    // ... 

    Player p = mp.get("John");

    // now use the player John i.e. the p object

聽起來你需要一個HashMap<String,Player>來存儲對你創建的Players的引用。

    int playersCount = arraylist.size(); //Size of ArrayList with Players names
    Map<String,Player> players = new HashMap<>();

    //create Players dynamicly
    for(int i = 0; i < playersCount; i++){
        Player player = new Player(arraylist.get(i));
        players.put (arraylist.get(i), player);
    }

players變量應該是創建玩家的類的成員,而不是局部變量。

然后你可以檢索一個玩家:

    Player player = players.get("John");

如果您只有List<Player>並且使用的是Java 8,則可以使用流API按名稱(或任何其他屬性)進行查找。 這比使用Map慢,但您可以以更靈活的方式搜索/映射/等您的集合。

Optional<Player> optPlayer = arraylist
    .stream()
    .filter(p -> "John".equals(p.get_playerName()))
    .findFirst();

if(optPlayer.isPresent()) {
    //player found
    Player p = optPlayer.get();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM