Как добавить объекты в ArrayList в классе без перерасчета предыдущих копий - PullRequest
3 голосов
/ 25 марта 2019

Попытка создать больше экземпляров автомобилей, но когда я добавляю их в массив, они переопределяют предыдущие экземпляры, это потому, что ArrayList находится внутри каждого экземпляра, который я создаю, было бы лучше создать класс инвентаря, который имеет ArrayList для хранения всего?

import java.util.ArrayList;

public class Automobile {

private String make;
private String color;
private int year;
private int mileage;
private ArrayList<Automobile> autoArray = new ArrayList<>();

public Automobile(String make, String color, int year, int mileage) {
    this.make = make;
    this.color = color;
    this.year = year;
    this.mileage = mileage;
    autoArray.add(this);


}

//setters (mutators)
public void setYearModel(int y) {
    year = y;
}

public void setMake(String type) {
    make = type;
}

public void setColor(String col) {
    color = col;
}

public void setMileage(int miles) {
    mileage = miles;
}

public String toString() {
    return "test = " + color + "; test " + year + "; test " + year + "; test " + make;
}


private ArrayList addVehicle(String m, String c, int y, int mile) {
    this.make = m;
    this.color = c;
    this.year = y;
    this.mileage = mile;
    autoArray.add(this);
    return autoArray;
 }
    public static void main(String[] args) {

    Automobile cars = new Automobile("kelvin","luke", 6, 9 );
    cars.autoArray.forEach(System.out::println);
    cars.addVehicle("horny","luke", 6, 9 );
    cars.autoArray.forEach(System.out::println);
}

}

Ответы [ 3 ]

1 голос
/ 25 марта 2019

Вам нужно создать новый Automobile в addVehicle() вместо изменения существующего:

private ArrayList addVehicle(String m, String c, int y, int mile) {
    autoArray.add(new Automobile(m, c, y, mile));
    return autoArray;
}

Это должно решить вашу проблему.Но да, в идеале вы должны также реорганизовать свой код, как предлагали другие комментаторы, потому что нет смысла создавать ArrayList<Automobile> внутри каждого экземпляра Automobile.

1 голос
/ 25 марта 2019

Попробуйте подумать о своей ситуации более ощутимо.Давайте предположим, что ваш класс Automobile представляет реальный автомобиль реального мира.

Имеет ли смысл для Automobile иметь список других автомобилей?Содержит ли ваш автомобиль реального мира другие автомобили?

Лучшим подходом здесь было бы вообще удалить ArrayList из вашего Automobile класса.Вместо этого этот список следует хранить где-то еще, где вы добавляете в него новые автомобили.


Вот возможный новый метод main(), который вы можете рассмотреть:

public static void main(String[] args) {

    ArrayList<Automobile> autos = new ArrayList<>();
    autos.add(new Automobile("kelvin", "luke", 6, 9));
    autos.add(new Automobile("horny", "luke", 6, 9));

    autos.forEach(System.out::println);
}
0 голосов
/ 25 марта 2019

Ваша проблема в том, как хранятся объекты.Изменяя параметры для класса Automobile, а затем добавляя this в список, вы просто снова добавляете тот же экземпляр с отредактированными параметрами.

Необходимо переместить Список за пределы класса Automobile, а затемсоздайте новые автомобили с помощью конструктора, а затем добавьте их в список.

...