例を使用して:
クラス呼び出しGun
があるとします。別のクラス呼び出しBullet
があります。
クラスGun
には、Bullet
のArrayListがあります。
これを行う代わりに、Gun
のArraylistを反復処理するには:
ArrayList<Gun> gunList = new ArrayList<Gun>();
for (int x=0; x<gunList.size(); x++)
System.out.println(gunList.get(x));
Gun
のArrayListを次のように単純に繰り返すことができます。
for (Gun g: gunList) System.out.println(g);
ここで、3番目のBullet
オブジェクトのすべてのGun
を反復して印刷します。
for (int x=0; x<gunList.get(2).getBullet().size(); x++) //getBullet is just an accessor method to return the arrayList of Bullet
System.out.println(gunList.get(2).getBullet().get(x));
今私の質問は:従来のforループを使用する代わりに、ArrayList反復を使用して銃オブジェクトのリストを印刷するにはどうすればよいですか?
前と同じパターンに従う必要があります。
for (Type curInstance: CollectionOf<Type>) {
// use currInstance
}
この場合、次のようになります。
for (Bullet bullet : gunList.get(2).getBullet()) {
System.out.println(bullet);
}
編集:
まあ、彼は彼の投稿を編集しました。
オブジェクトがIterableを継承する場合、for-eachループを次のように使用することができます。
for(Object object : objectListVar) {
//code here
}
あなたの場合、銃と弾丸を更新したい場合:
for(Gun g : guns) {
//invoke any methods of each gun
ArrayList<Bullet> bullets = g.getBullets()
for(Bullet b : bullets) {
System.out.println("X: " + b.getX() + ", Y: " + b.getY());
//update, check for collisions, etc
}
}
最初に3番目のGunオブジェクトを取得します。
Gun g = gunList.get(2);
次に、3番目の銃の弾丸を反復処理します。
ArrayList<Bullet> bullets = g.getBullets();
for(Bullet b : bullets) {
//necessary code here
}
Java8を使用する場合は、より簡単で、ライナーは1つだけです。
gunList.get(2).getBullets().forEach(n -> System.out.println(n));
for (Bullet bullet : gunList.get(2).getBullet()) System.out.println(bullet);
ネストされたループを実行して、リスト内の要素のすべての要素にアクセスできます。
for (Gun g: gunList) {
System.out.print(g.toString() + "\n ");
for(Bullet b : g.getBullet() {
System.out.print(g);
}
System.out.println();
}
int i = 0; // Counter used to determine when you're at the 3rd gun
for (Gun g : gunList) { // For each gun in your list
System.out.println(g); // Print out the gun
if (i == 2) { // If you're at the third gun
ArrayList<Bullet> bullets = g.getBullet(); // Get the list of bullets in the gun
for (Bullet b : bullets) { // Then print every bullet
System.out.println(b);
}
i++; // Don't forget to increment your counter so you know you're at the next gun
}