【发布时间】:2020-03-25 12:42:46
【问题描述】:
我对编程很陌生,我无法让它工作。 解释起来很复杂。基本上有一个粒子生成器可以生成一定数量的粒子。这些粒子需要相互交互,所以它们都有一个包含所有粒子的 ArrayList。但是,我不希望他们与自己交互,所以我想从他们自己的 ArrayList 中删除对象。存储类仍然拥有他自己的 Arraylist 中的所有对象。问题是当我试图让对象从它们的 Arraylist 中删除一个对象时,所有对象都被删除并且存储对象的 ArrayList 也是空的。我知道我不必这样做,但我真的很想知道它为什么不起作用,而且我认为如果它以这种方式工作比每次交互功能运行时必须跳过一个对象时更干净。 因为描述起来相当复杂,最好只看代码。 该代码仅包含重要的代码,它是一个简化版本。该行: l.remove(n); ,是把一切搞砸的那条线。
G g;
void setup()
{size(1000, 600);
g = new G(10);
}
void draw()
{
background(255);
g.displayg();
text(g.g.size(), 200, 200);
}
将存储在 g 类中的第一个类
class D
{
int n;
ArrayList<D> l = new ArrayList<D>();
D(int input)
{
this.n = input;
}
void seTup(ArrayList<D> input)
{
l = input;
l.remove(n); //if you delete this line, everything works
}
void display()
{
fill(0);
text(this.n, 100+ 10* n, 100);
}
}
和存储类
class G
{ int number;
ArrayList<D> g = new ArrayList<D>();
G(int inputnumber)
{this.number = inputnumber;
for(int i =0; i < number; i++)
{g.add(new D(i));
}
for(int i = g.size()-1; i>=0;i--)
{
D x = g.get(i);
x.seTup(g);
}
}
void displayg()
{
for(D i : g)
{//text(i.n, 100 + 5*i.n, 100);
i.display();
}
}
}
【问题讨论】:
-
这可能是按索引删除的删除调用,而不是按整数对象?此外,每个粒子不需要由所有其他粒子组成。只需让处理所有这些元素的一个调用迭代所有这些元素,然后再次循环并检查第一个循环中的元素是否是第二个循环中的元素,如果是,则不要执行。
-
remove 调用确实按索引删除,但整数与 g ArrayList 中的索引匹配,该索引被复制到所有对象中,因此它应该删除正确的对象,并且每个对象只运行一次(我希望是这样)。出于某种原因,当您输入 0 或 n 时,仅删除调用不会出错
标签: java object arraylist processing