如何在没有特定列数的情况下填充二维数组?
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'。
由于
答案 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];
}
...
}
由于多种原因,这项工作无法实现:
col
受matrizAnimal
的第一个维度限制为2,因此将该值应用于第二维度存在一定风险matrizAnimal
,但我看不到任何初始化元素的代码,因此matrizAnimal[0][col]
将导致NullPointerException,因为索引0处的元素尚不存在如果我正确理解了您的问题,您希望创建matrizAnimal
的第二维,并在运行时计算长度。
为此,您有两种选择:
如果您知道创建第二个维度的长度,可以直接将其传递给构造调用:
int lengthOfRow = 4;
matrizAnimal[0] = new Animals[lengthOfRow];
如果长度取决于第二个维度数组中的元素,则可以使用列表,填充该列表并最终将其转换为数组:
List<Animals> list = ...;
//fill list
matrizAnimal[0] = list.toArray(new Animals[list.size()]);
修改强>:
澄清多维数组:数组只能是一维的,但可以包含其他数组。因此,&#34;多维&#34; array实际上是一个包含数组等的数组。与其他语言(如C ++)相比,整个数组不布局在连续的内存中。