除了数组之外,不使用任何数组列表或向量或任何其他类型的内置java数据结构,我需要编写一个方法,将动物对象插入任何位置并移动当前位置和其他位置在右边。
执行此操作时,我必须确保集合尚未达到其最大值。
我如何实际编写此方法?我的版本不会编译错误。我无法弄清楚这个问题。有人可以帮助我使用我当前的代码编写这个方法并提供解释吗?
private Animal [] objects;
final int MAX_ANIMALS = 100;
public AnimalObject()
{
objects = new AnimalObject[MAX_ANIMALS];
}
public AnimalObject(Animal[]a)
{
objects = a;
}
public void addAnimal(Animal a,int position)
{
Animal [] newAnimal = new Animal[objects.length];
for(int i =0; i < position; i++)
{
newAnimal[i] = objects[i];
}
newAnimal[position] = a;
System.arraycopy(objects, position, newAnimal, position+1, objects.length - position);
for(int i = position+1; i < newData.length; i++)
{
newAnimal[i] = objects[i-1];
}
答案 0 :(得分:0)
我不会尝试修复您的不完整代码,但我会提供一个可能的解决方案和一条建议。让我们从建议开始:不要重新发明轮子。除非你是以练习为例,否则请使用ArrayList
。正是为了做到这一点。如果它是一个练习,我不确定你是否会通过在StackOverflow上寻找答案获得更多。最佳检查ArrayList
源代码:)
至于一个可能的解决方案,这里有一个 - 我试图模仿你上面粘贴的内容(为了便于阅读而进行了小的命名调整):
public class AnimalsArray {
final int MAX_ANIMALS = 100;
private Animal[] animals;
public AnimalsArray()
{
this.animals = new Animal[MAX_ANIMALS];
}
public AnimalsArray(Animal[]a)
{
this.animals = a;
}
public void addAnimal(Animal animal, int position) {
Animal[] newAnimals = new Animal[animals.length + 1];
for (int i = 0; i < position; i++) {
newAnimals[i] = animals[i];
}
newAnimals[position] = animal;
System.arraycopy(animals, position, newAnimals, position + 1, animals.length - position);
this.animals = newAnimals;
}
}
你显然想要添加更多方法(比如我猜测数组元素的检索)。但请注意,上述代码 HIGHLY 效率低下。添加元素时,数组每次
。如果你想做到这一点,你应该:
通过检查ArrayList,您可以获得有关如何完成任务的更多想法。除了更高效之外,它也是通用的,这不能说你的代码(这可以修复但是再次 - 使用ArrayList!)。