У меня есть игра с некоторыми астероидными объектами в arraylist. Чтобы мой код был аккуратным и жестким, я хочу передать этот arraylist различным классам/методам. Я думал, что понял, но, видимо, нет. Здесь: Класс Level1 начинается с метода инициализации (init), который вызывает метод populateAsteroid в классе астероидов. Кроме того, класс Level1 содержит функцию обновления, которая пересекает астероидный арифалист и обновляет его. Все это прекрасно работает:Получение arraylist возвращает null
public class Level1 {
private Asteroid populateAsteroid
private Collision collision;
public void init() {
populateAsteroid = new Asteroid();
// create and populate an arraylist with asteroid objects
populateAsteroid.populateAsteroid(1);
collision = new Collision();
}
public void update() {
// get the arraylist
ArrayList<Asteroid> asteroidList = populateAsteroid.getAsteroidList();
for(int i = 0; i < asteroidList.size(); i++) {
Asteroid a = asteroidList.get(i);
a.update(i);
}
collision.checkCollision();
}
}
public class Asteroid {
public ArrayList<Asteroid> asteroidList;
public void populateAsteroid(int level) {
// if the arraylist is null, as when the function is called by init, create the array
if (asteroidList == null){
asteroidList = new ArrayList<Asteroid>();
}
for (int i = 1 + asteroidList.size(); i <= (asteroidsAtEachLevel[level]); i++){
Asteroid a = new Asteroid();
asteroidList.add(a);
}
}
public ArrayList<Asteroid> getAsteroidList() {
return asteroidList;
}
}
Однако, беда приходит в моем классе столкновения, вызванном с помощью функции обновления в классе Level1, который содержит метод checkCollision
public class Collision {
private Asteroid a;
public void checkCollision(){
a = new Asteroid();
// get the arraylist
ArrayList<Asteroid> asteroidList = a.getAsteroidList();
if (asteroidList == null){
System.out.println("null");}
}
..."more code"....
Список имеет нулевое значение, хотя я считаю, что я возвращаю arraylist идентично тому, как я это делаю в функции Level1.update. Это потому, что какой-то аррайалист не отображается, поскольку он создается из вызова класса Level1? Какие-либо предложения?
Вы никогда не называете 'populateAsteroid'' '', поэтому список никогда не создается. – resueman
Вы никогда не заполняете астероид, поэтому его список по-прежнему «null». Возможно, вы хотели использовать тот, который вы создали, в свой метод 'init()', вместо этого создавая новый (пустой) в 'checkCollision()'? – azurefrog
Вы говорите 'a = новый Asteroid();' и затем вызываете 'a.getAsteroidList();', это не инициализирует список астероидов – Orin