私は、arraylistにいくつかの小惑星オブジェクトを持つゲームを持っています。私のコードをきちんとしたものにするために、私はこのarraylistを別のクラス/メソッドに渡したいと思っています。私はそれが分かったと思った。しかし明らかにそうではなかった。ここに行く: My Level1クラスは、小惑星クラスのpopulateAsteroidメソッドを呼び出す初期化メソッド(init)から開始します。 Level1クラスには、小惑星のアライリストをループして更新する更新機能が含まれています。このすべてが正常に動作します:arraylistが返ってきます。
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;
}
}
しかし、トラブルが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"....
リストがnullが含まれているレベル1のクラスに更新機能によって呼び出された私の衝突クラス、、入って来、私がLevel1update関数でやっているのと同じようにarraylistを取得していると私は信じています。 レベル1クラスの呼び出しからarraylistがどのように見えないのか?助言がありますか?
'a 'に決して' populateAsteroid'を呼び出さないので、リストは決して作成されません。 – resueman
あなたは決して小惑星を占領しないので、そのリストはまだ「ヌル」です。おそらく、あなたの 'init()'メソッドで作成したものを 'checkCollision()'に新しい(空の)メソッドを作成する代わりに使うのでしょうか? – azurefrog
'a = new Asteroid();'と 'a.getAsteroidList();'を呼び出すと、これは小惑星リストを初期化していません – Orin