2

我正在这个名为“毕业”的论坛帖子上做最后一个挑战,除了 Java:http ://www.cplusplus.com/forum/articles/12974/

我基本上偶然发现了一个问题,如果我有一个兔子对象的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 个可能的兔子对象创建一个数组空间而只使用一个空间作为标识符,这似乎是一种巨大的内存浪费。但我似乎想不出一种以任何其他方式动态命名每个变量的方法。真的,我需要的是一种在我制作兔子时生成带有数字的变量的方法,这样无论如何它们都是独立的。

有什么建议吗?

4

1 回答 1

2

bunny[i]实际上是一个Bunny对象,而不是一个array对象Bunny

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

应该

private static ArrayList<Bunny> bunnyList = new ArrayList<Bunny>(); 
于 2013-10-23T18:10:10.003 回答