2015-02-06 5 views
0

Здравствуйте, мне было интересно, как написать метод для добавления и удаления объектов из массива объектов в java. Мне не разрешено использовать какие-либо из построенных в Java абстрактных структур данных для этого, например, список массивов или векторов ect.. Список автомобилей полностью пуст, но новый автомобиль - новый объект автомобиля, который нужно добавить в эту коллекцию. позиция - позиция в этом CarCollection, где будет вставлен автомобиль Предпосылки: Этот объект CarCollection был создан и 1 < позиция < items_currently_in_list + 1 . Количество объектов автомобиля в этом меню меньше, чем maxCarsPossible.Добавление элементов в массив java

Состояние: Новый автомобиль теперь хранится в нужном месте в коллекции. Все carthat изначально были в позициях, превышающих или равных положению, перемещаются назад на одну позицию. (Например: если в коллекторе есть 5 автомобилей, позиции 1-5, и вы вставляете новый автомобиль в позицию 4, новая карта теперь будет в положении 4, автомобиль, который был в положении 4, будет перемещен в позицию 5 , и автомобиль, который находился в положении 5, будет перемещен в позицию 6).

public class CarCollection { 

    private Car[] collection; 
    final int maxCarsPossible = 100; 

    public CarCollection() 
    { 
     collection = new Car[0]; 

    } 

    public void addCar(Car newCar,int position) 
    { 

     for(int i =0; i < collection.length; i++) 
     { 
      if(collection.length+1>=position&&position>=1) 
      { 
       i = position; 
       collection[i] = newCar; 
      } 
     } 

    } 
+0

Вы хотите добавить/удалить элемент массива (как в заголовке), или создать новый массив, который является копией старого с элементом добавлено/удалено ? –

+0

@AdrianShum поднимает хороший вопрос, это очень важно, чтобы определить, какое именно решение вам нужно. Создание копии массива «удалит» данные. Я вижу одну проблему в вашем конструкторе; вы делаете размер массива 0 с места в карьер. Вероятно, это не то, что вы намеревались. Кроме того, ваш оператор if действительно запутан, попробуйте разбить его, нет вреда в использовании вложенных if-утверждений, если он улучшает ясность. –

+0

коллекция.length + 1? Когда вы когда-нибудь перешагнете границы своего массива? Это условие всегда будет истинным из-за того, как разработан ваш цикл for. Вы никогда не должны смотреть за пределы массива. –

ответ

0

Я бы рекомендовал хранить другой массив с именем oldCarCollection, а просто сброс и обновление, что каждый раз, когда добавляется новый автомобиль. Например, в методе addCar,

public void addCar(Car carToAdd) { 
    cars = new Car[oldCars.length + 1]; 
    for (int i = 0; i < cars.length; i++) { 
     if (i == oldCars.length) { 
      // If we're done transferring from old cars. 
      cars[i] = carToAdd; 
     } else { 
      // Transfer from old cars 
      cars[i] = oldCars[i]; 
     } 
    } 
    // Update oldCars 
    oldCars = new Car[cars.length]; 
    System.arraycopy(cars, 0, oldCars, 0, oldCars.length); 
} 
+0

Есть ли способ сделать это, используя заданные параметры в заголовке метода? используя объект и int для вставки в определенную позицию? – n94pro

+0

Что вы можете сделать, это объявить String [] cars и String [] oldCars в верхней части класса (вот что я сделал в этом примере). – SirFaizdat

+0

объекты автомобиля имеют несколько значений string ints двойные массивы, сохраненные в них ect – n94pro