2014-07-24 7 views
24

एक उदाहरण का उपयोग करना:वस्तुओं के ArrayList के ऑब्जेक्ट्स के एक ArrayList के माध्यम से कैसे पुनरावृत्ति?

Let कहते हैं कि मैं एक वर्ग कॉल Gun है। मेरे पास एक और क्लास कॉल Bullet है।

कक्षा Gun में Bullet का एक ऐरेलिस्ट है।

ArrayList<Gun> gunList = new ArrayList<Gun>(); 
for (int x=0; x<gunList.size(); x++) 
    System.out.println(gunList.get(x)); 

हम तो बस जैसे Gun की ArrayList के माध्यम से पुनरावृति कर सकते हैं::

ऐसा करने का Gun ..instead की ArrayList के माध्यम से पुनरावृति करने के लिए

for (Gun g: gunList) System.out.println(g); 

अब, मैं पुनरावृति करना चाहते हैं और मेरे 3 Gun ऑब्जेक्ट के सभी Bullet को मुद्रित करें:

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 (Type curInstance: CollectionOf<Type>) { 
    // use currInstance 
} 

इस मामले में यह हो सकता है:

for (Bullet bullet : gunList.get(2).getBullet()) { 
    System.out.println(bullet); 
} 
+2

आपको ऐसा क्यों लगता है कि आपके मामले में कोई अंतर है? जब तक आपकी कक्षा 'Iterable' लागू करती है (और हम जानते हैं कि 'सूची' करता है) आप' प्रत्येक-प्रत्येक 'लूप का उपयोग कर सकते हैं। –

+0

किसके लिए इस सवाल को वोट दिया गया है, यहां कोई कारण छोड़ने की परवाह है? मैंने एसओ के माध्यम से जांच की है और कोई भी इससे पहले नहीं पूछा। मुझे आशा है कि आप मुझे वोट देने के लिए अपने कारण को उचित ठहरा सकते हैं। धन्यवाद। – user3437460

+1

किसी भी तरह की आत्माओं के लिए, यदि आपको लगता है कि मेरा प्रश्न ठीक है, तो कृपया मुझे इस अन्यायपूर्ण वोट वोट को दूर करने के लिए एक वोट दें। धन्यवाद। – user3437460

उत्तर

20

आप एक ही पैटर्न का पालन करने के लिए पहले की तरह चाहते हैं ।

एक वस्तु को विरासत में तो Iterable, आप के लिए-प्रत्येक जैसे पाश उपयोग करने की क्षमता है:

:

for(Object object : objectListVar) { 
    //code here 
} 
अपने मामले में

तो, आप अपने बंदूकें और उनके बुलेट अद्यतन करने के लिए चाहते थे

Gun g = gunList.get(2); 
:
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 
    } 
} 

सबसे पहले अपने तीसरे गन वस्तु मिल 0

फिर तीसरे बंदूक की गोलियों से अधिक पुनरावृति:

ArrayList<Bullet> bullets = g.getBullets(); 

for(Bullet b : bullets) { 
    //necessary code here 
} 
+0

आपने मुझे वही दिया जो मैंने मांगा था। मैने इसे आजमाया और इसने कार्य किया। उत्तर देने में हर किसी के लिए धन्यवाद। – user3437460

1
for (Bullet bullet : gunList.get(2).getBullet()) System.out.println(bullet); 
+0

कोड की एक पंक्ति पोस्ट करना और फिर कुछ भी समझा नहीं करना एक भयानक बात है। –

+1

गंभीरता से? मैंने सोचा कि एक कोड की एक पंक्ति को आमतौर पर स्पष्टीकरण की आवश्यकता नहीं होती है। खासकर जब जिस व्यक्ति ने खुद से सवाल पूछा वह लिखा: "के लिए (गन जी: गनलिस्ट) System.out.println (g);" –

3

संपादित करें: अपने पद

खैर, वह संपादित

1

हम एक नेस्टेड लूप अपनी सूची में तत्वों के सभी तत्वों को यात्रा करने के लिए कर सकते हैं:

for (Gun g: gunList) { 
    System.out.print(g.toString() + "\n "); 
    for(Bullet b : g.getBullet() { 
     System.out.print(g);  
    } 
    System.out.println(); 
} 
0
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 
} 
5

Java8 यह होगा का उपयोग करते समय केवल अधिक आसान और एक लाइनर बनें।

gunList.get(2).getBullets().forEach(n -> System.out.println(n)); 
+0

या यहां तक ​​कि 'gunList.get (2) .getBullets()। प्रत्येक (System.out :: println); '। –

संबंधित मुद्दे