2013-10-23 32 views
2

我用Java做這個所謂的「畢業」的論壇帖子的最後一個挑戰,除了代替:http://www.cplusplus.com/forum/articles/12974/生成動態對象名稱的ArrayList內的Java

我基本上橫跨在那裏,如果我有一個問題絆倒根據男性和女性的數量產生新後代的bunny對象的arrayList,我需要爲每個新的後代給出一個列表的動態名稱,或者編譯器會精神錯亂並拋出一個ConcurrentModifierException異常(我假設這是因爲它試圖通過具有相同變量名稱的多個對象)。

我能想到的唯一的辦法就是通過使兔子對象數組像是在說:

bunnyList.add(bunny[i + 1]) 

其中I是所有的兔子那種「全球性」的ID。但問題是,如果我將它添加到列表中是非法的。說實話,我不知道爲什麼要麼因爲我設置數組列表是類型兔子數組而不是隻是普通的老兔子。

public class Bunnies { 

    private static ArrayList<Bunny[]> bunnyList = new ArrayList<Bunny[]>(); 
    private static Bunny[] bunny = new Bunny[500]; //gives it a kind of id 
    private static int i = 0; //global bunny counter 

    Bunnies(){ 

     //init the game list. 
     initBunnyGameList(); 
    } 

    private void initBunnyGameList(){ 

     for (int i = 0; i < 5; i++){ 
      bunny[i] = new Bunny(); 
      bunnyList.add(bunny[i]); //ILLEGAL :(! 
     } 

    } 
} 

而且做這種方式似乎是記憶大量浪費創造500個可能兔子對象只能永遠使用一個空間作爲標識符的陣列空間。但我似乎無法想出一種以任何其他方式動態命名每個變量的方法。真的,我需要的是一種方法,當我製作一個兔子時,最終用一個數字生成變量,所以無論如何他們都是個人。

任何建議hombres?

回答

2

bunny[i]實際上是一個Bunny對象,而不是對象的array

private static ArrayList<Bunny[]> bunnyList = new ArrayList<Bunny[]>(); 

應該

private static ArrayList<Bunny> bunnyList = new ArrayList<Bunny>(); 
+1

此外,對於OP:這是一個很好的做法,鍵入您的變量作爲接口類型,除非你真的需要具體的執行類型的功能:'私人靜態列表 bunnyList =新ArrayList ();' – ach

+0

哈哈,這是意想不到的簡單,但它的工作!我可以看到我的困惑在哪裏。 我想我只是使用ArrayList,因爲這是我所知道的,我只是剛剛進入這個更高級的面向對象的東西,但我可以看到你來自哪裏,我一定會看到未來在我實際使用的API中,並根據我找到的x縮小或放大 –