Изменение значений объекта ArrayList из другого класса
У меня есть два класса: класс Creature, который содержит boray ArrayList, и класс Food. Боиды имеют несколько параметров:
Creature(float posX, float posY, int t, int bth, int ah) {
location = new PVector(posX, posY);
vel = new PVector(random(-5,5), random(-5, 5));
acc = new PVector();
type = t;
if (t == 1) { btype = bth; }
else { health = bth; }
if (t == 1) { age = ah; }
else { hunger = ah; }
wdelta = 0.0;
action = 0;
if (btype == 1) { mass = 5.0; }
else { mass = 7.0; }
}
Класс еды имеет такой метод:
void foodtime(ArrayList boids) {
for (int i = 0; i < boids.size(); i++) {
Creature boid = (Creature) boids.get(i);
float distance = PVector.dist(location, boid.location);
if (distance < 0.5) {
bnumadj = i;
count++;
if (count == quantity) {
planet.food.remove(this);
count = 0;
bnumadj = -1;
}
}
}
}
То, чего я пытаюсь добиться, это то, что если boid "съедает" еду, то тип boid (btype) меняется с 2 на 1.
Я пытаюсь использовать переменную bnumadj, чтобы передать ее boid в этом методе:
void boid(ArrayList boids) {
for (int i = 0; i < boids.size(); i++) {
if (i == bnumadj) {
this.btype = 1;
bnumadj = -1;
}
}
}
Куда я иду не так?
1 ответ
Это кажется очень запутанным способом сделать это, поэтому я не удивлен, что у вас есть проблемы. Вы сравниваете значения с индексами, что не имеет для меня большого смысла.
Вместо этого попробуйте использовать простой вложенный цикл, чтобы делать то, что вы хотите. Вы можете использовать Iterator
чтобы было проще удалять элементы во время итерации.
ArrayList<Creature> boids = new ArrayList<Creature>();
ArrayList<Food> food = new ArrayList<Food>();
//populate ArrayLists
void draw(){
for(Creature boid : boids){
Iterator<Food> foodIter = food.iterator();
while(foodIter.hasNext()){
Food f = foodIter.next();
float distance = PVector.dist(boid.location, food.location);
if (distance < 0.5) {
boid.btype = 1;
foodIter.remove(); //removes the food
}
}
}
//draw the scene
}
Я полагаю, вы можете переместить вторую итерацию, используя Iterator
внутри Creature
типа, но основная идея заключается в следующем: сделать это простым с помощью Iterator
удалить Food
вместо того, чтобы пытаться сопоставить индексы.