Почему только один массив в классе содержит переменные всех объектов? - PullRequest
0 голосов
/ 25 мая 2019

У меня есть проблема, упомянутая в заголовке.Я сделаю все возможное, чтобы вы поняли, что я пытаюсь сделать.Во-первых, чтобы подвести итог моих классов, я показал их ниже:

Classes
|___ Starter.java (main class)
|___ Line.java
|___ CrossSection.java
|___ SectionAssigner.java

В своем основном классе я создал переменные ArrayList, которые содержат объекты из Line , SectionAssigner и CrossSection классы:

public static void main(String[] args) {
    ArrayList<Line> lines = new ArrayList<Line>();
    ArrayList<Line> lineKeeper = new ArrayList<Line>();
    ArrayList<CrossSection> crossSections = new ArrayList<CrossSection>();
    ArrayList<SectionAssigner> sectionAssigners = new ArrayList<SectionAssigner>();
}

Конструктор класса SectionAssigner получает два параметра: ArrayList и CrossSection :

public SectionAssigner(ArrayList<Line> lineList, CrossSection crossSection){
    this.lineList = lineList;
    this.crossSection = crossSection;
}

Кроме того, SectionAssigner класс возвращает длины всех строк ( this.linelist ) с функцией getLinesLength () :

public ArrayList<Double> getLinesLength(){
    for (int k=0; k<this.lineList.size(); k++) {
        this.returnedIndex.add(this.lineList.get(k).getLength());
    }
    return this.returnedIndex;
}

В приведенных ниже строках кода в моем основном классе я спрашиваю пользователя, «какие линии и сечение вы хотите назначить для SectionAssigner?», Тогда я сохраняю выбор пользовательских линий в linekeeper переменная и индекс сечения в переменной crossSectionIndex .Затем с этими данными я создаю новую переменную из SectionAssigner , которая также вставляется в sectionAssigners ArrayList:

sectionAssigners.add(new SectionAssigner(lineKeeper, crossSections.get(crossSectionIndex)));

Наконец, я показываю пользователюкакие строки были назначены, какие разделы:

System.out.println("SectionAssigned" + counter + ": " + sectionAssigners.get(counter).getLinesLength() ); 

Эти коды и вещи, которые я пытаюсь сделать, могут быть трудно понять, поэтому я проиллюстрирую их ниже на примере:

Давайте скажему пользователя есть 6 строк с индексом

Line0
Line1
Line2
Line3
Line4
Line5

. После этого пользователь хочет выполнить назначение поперечного сечения, как показано ниже:

SectionAssign0: Line0, Line1
SectionAssign1: Line2, Line3, Line4, Line5

Так, в приведенном выше примере консоль должна показатьline0 и строка 1 в SectionAssign0;line2, line3, line4, line5 в SectionAssign1.Но консоль показывает, как показано ниже:

SectionAssign0: Line0, Line1, Line2, Line3, Line4, Line5
SectionAssign1: Line0, Line1, Line2, Line3, Line4, Line5

Я не знаю полностью использование ArrayList.Содержит ли элемент одного ArrayList в классе все объекты, созданные из этого класса?Или есть какая-то роковая ошибка, которую я совершил?

1 Ответ

0 голосов
/ 25 мая 2019

Содержит ли элемент одного ArrayList в классе все объекты, созданные из этого класса?

Нет, только те, кто добавил это тоже.

Проблема здесь:

sectionAssigners.add(new SectionAssigner(lineKeeper, crossSections.get(crossSectionIndex)));

Все ваши sectionAssigners используют такие же ArrayList (lineKeeper). Если вы хотите, чтобы они хранили вещи отдельно, у каждого из них должен быть свой собственный ArrayList, а не общий доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...