填充数组bidimensional没有列

时间:2015-06-16 10:42:24

标签: java arrays

如何在没有特定列数的情况下填充二维数组?

private Animals[] animals;
    private Animals[][] matrizAnimal;
    private final int MAX_ANIMALS = 20;
    private int numAnimals;

    CatalogueAnimals()
    {
        animals = new Animals[MAX_ANIMALS];
        numAnimals = 4;

        matrizAnimal = new Animals [2][];

        animals[0] = new Dog("Pipi", 10);
        animals[1] = new Cat("mimi", 4);
        animals[2] = new Cat("jerry", 5);
        animals[3] = new Cat("josh", 9);

    }

public void fillArrayBi()
    {

        int i=0;

        do{
                for (int col=0; col<matrizAnimal.length; col++)
                {

                        if (animals[i] instanceof Dog)
                        {
                            matrizAnimal[0][col] = animals[i];
                        }
                            else if (animals[i] instanceof Cat)
                        {
                            matrizAnimal[1][col] = animals[i];

                        }   
                    i++;
                }
        }while(i<numAnimals);


        }

我正在尝试填充数组。第一行包含'Dogs',第二行包含'Cats'。

由于

2 个答案:

答案 0 :(得分:1)

Java数组需要声明大小,因此您必须知道创建数组时的列数。我会使用Collections

以不同的方式使用此方法

您可以使用2 ArrayList,或者如果您只想要一个对象,则Map

创建并初始化Map

Map<String, List<Animals>> animalsMap = new HashMap<String, List<Animals>>();

然后,

if (animals[i] instanceof Dog)
{
    if (animalsMap.get("Dog") != null)
    {
        animalsMap.put("Dog", animalsMap.get("Dog").add(animals[i]));
    } else {
        List<Animal> a = new ArrayList<Animal>();
        a.add(animals[i]);
        animalsMap.put("Dog", a);
    }
}
else if (animals[i] instanceof Cat)
{
    if (animalsMap.get("Dog") != null)
    {
        animalsMap.put("Cat", animalsMap.get("Dog").add(animals[i]));
    } else {
        List<Animal> a = new ArrayList<Animal>();
        a.add(animals[i]);
        animalsMap.put("Cat", a);

}  

答案 1 :(得分:1)

for (int col=0; col<matrizAnimal.length; col++)
{
  if (animals[i] instanceof Dog)
  {
    matrizAnimal[0][col] = animals[i];
  }
  ...
}

由于多种原因,这项工作无法实现:

  • colmatrizAnimal的第一个维度限制为2,因此将该值应用于第二维度存在一定风险
  • 您创建了matrizAnimal,但我看不到任何初始化元素的代码,因此matrizAnimal[0][col]将导致NullPointerException,因为索引0处的元素尚不存在

如果我正确理解了您的问题,您希望创建matrizAnimal的第二维,并在运行时计算长度。

为此,您有两种选择:

  1. 如果您知道创建第二个维度的长度,可以直接将其传递给构造调用:

    int lengthOfRow = 4; matrizAnimal[0] = new Animals[lengthOfRow];

  2. 如果长度取决于第二个维度数组中的元素,则可以使用列表,填充该列表并最终将其转换为数组:

    List<Animals> list = ...; //fill list matrizAnimal[0] = list.toArray(new Animals[list.size()]);

  3. 修改

    澄清多维数组:数组只能是一维的,但可以包含其他数组。因此,&#34;多维&#34; array实际上是一个包含数组等的数组。与其他语言(如C ++)相比,整个数组布局在连续的内存中。