Я хотел бы смоделировать график и сделать это:
- У меня есть класс A, который содержит LinkedList экземпляров A и имеет связанный метод установки:
class A {
private LinkedList<A> list;
[...]
public setList(LinkedList<A> l) {
this.list = l;
}
}
- И в другом классе NetA у меня есть метод genCon, который принимает LinkedList экземпляров A, а затем устанавливает их атрибут списка как перетасованный подсписок rlist:
static void genCon (LinkedList<A> rlist) {
for(int i=0; i<rlist.size(); i++) {
A temp = rlist.get(i);
LinkedList<A> slist = new LinkedList<A>(rlist.subList(0, rlist.size()));
temp.setList(slist);
}
}
Затем вызывается genCon (rlist) в main, но, хотя все объекты rlist должны иметь инициализированный список (равный перетасованной версии rlist), некоторые выглядят пустыми, без какого-либо согласованного шаблона (т.е. некаждый n или повторяющийся шаблон), но совершенно случайно.
Сначала я подумал, что A temp = rlist.get(i)
не дает мне мелкую копию объекта с индексом i, но проверка на идентичность с ==
возвращаетправда, поэтому, если я не ошибаюсь, это означает, что обе переменные содержат одну и ту же ссылку, и это не должно быть причиной проблемы? Тогда я подумал, что это может быть проблемой оптимизации, может быть, eclispe пытается выполнять операции параллельно, и это как-то портит инициализацию случайным образом? Я попытался обработать шаг за шагом, но я не могу найти, где я испортил. Что я пропустил?
Редактировать:
Основная функция выглядит так:
public static void main(String[] args) {
LinkedList<A> a_list = generateAList(20);
genCon(a_list);
for(int i=0; i<a_list.size(); i++) {
System.out.println(a_list.get(i).toString());
}
}
a_list правильно инициализирован. Проблема возникает в следующем цикле при попытке печати объектов. Поскольку он предназначен только для тестирования, main находится в том же классе, что и at genCon ().
generateAList () выглядит следующим образом:
static public LinkedList<A> generateAList(int n) {
LinkedList<A> a_list = new LinkedList<A>();
for(int i=0; i<n; i++) {
ap_list.add(A.rand()); // A.rand() is just a static function that return an instance of A with randomly set values and an unitialized list.
}
return ap_list;
}