2011-10-07 12 views
29

क्या मौजूदा इंडेक्स को लूप के लिए बढ़ाया गया है? यदि हां, तो कैसे?क्या मौजूदा इंडेक्स को लूप के लिए बढ़ाया गया है?

मुझे पता है कि हम इसे एक अतिरिक्त चर के साथ देख सकते हैं। लेकिन क्या कोई और तरीका है।

public boolean cancelTicket(Flight f, Customer c) { 
    List<BookingDetails> l = c.getBooking(); 
    if (l.size() < 0) { 
     return false; 
    } else { 
     for (BookingDetails bd : l) { 
      if(bd.getFlight()==f){ 
       l.remove() // Index here.. 
      } 
     } 
    } 
} 
+6

यह कोई समझ नहीं आता है: 'if (list.size() <0) '। शायद आप '==' के बजाय मतलब था? –

+1

इसे जांचें। http://stackoverflow.com/questions/1196586/calling-remove-in-foreach-loop-in-java – Vaandu

+3

यहां तक ​​कि अगर आप के लिए एक बेहतर में सूची से तत्व को निकालने का प्रयास, सूचकांक था लूप एक समवर्ती मोडिफिकेशन अपवाद का कारण बनता है। @aioobe –

उत्तर

30

यह एक में मौजूद सूचकांक पाश के लिए बढ़ाया खोजने के लिए संभव है?

नहीं। आप सूचकांक की जरूरत है, मैं तुम्हारे लिए लूप एक साधारण का उपयोग सुझाव देते हैं।

हालांकि, आपको वास्तव में इस स्थिति में सूचकांक की आवश्यकता नहीं है। जब तक आप सूची में से कुछ वास्तव में अजीब प्रकार के साथ काम कर रहे हैं, आप एक Iterator साथ जा सकते हैं और Iterator.remove() विधि का उपयोग करें, इस तरह:

public boolean cancelTicket(Flight f, Customer c) { 
    Iterator<BookingDetails> bdIter = c.getBooking().iterator(); 

    if (!bdIter.hasNext()) 
     return false; 

    while (bdIter.hasNext()) 
     if (bdIter.next().getFlight() == f) 
      bdIter.remove(); 

    return true; 
} 
+5

द्वारा सुझाए गए अनुसार एक इटरेटर का उपयोग करें "हालांकि आपको इस विशेष स्थिति में निकालने के लिए इंडेक्स की आवश्यकता नहीं है" - इसके अलावा, आप * निकालने के ऑपरेशन के लिए इंडेक्स का उपयोग नहीं कर सकते हैं, क्योंकि यदि आप करते हैं, तो आप एक 'ConcurrentModificationException' मिलेगा। जैसा कि एयोबोब कहते हैं, ऐसा करने का सही तरीका 'Iterator.remove()' के साथ है। –

+0

अच्छा बिंदु! :-) – aioobe

9

यह एक बढ़ाया में मौजूद सूचकांक को खोजने के लिए संभव है पाश के लिए?

सूचकांक हो रही के लिए, आप List.indexOf(object) उपयोग कर सकते हैं।

मैंने इन तकनीकों का उपयोग सूची में वर्तमान ऑब्जेक्ट की अनुक्रमणिका प्राप्त करने के लिए किया है। उदाहरण के लिए आपने ऊपर दिया है, हटाने को दो तरीकों से उपयोग किया जा सकता है।

  • ऑब्जेक्ट को निकालने के लिए ऑब्जेक्ट इंस्टेंस का उपयोग करना।
public boolean cancelTicket(Flight f, Customer c) { 
     List<BookingDetails> l = c.getBooking(); 
     if (l.size() < 0) { 
      return false; 
     } else { 
      for (BookingDetails bd : l) { 
       if(bd.getFlight()==f){ 
        l.remove(bd) // Object Instance here.. 
       } 
      } 
     } 
    } 
  • List.indexOf (सूचकांक) का उपयोग करना
public boolean cancelTicket(Flight f, Customer c) { 
     List<BookingDetails> l = c.getBooking(); 
     if (l.size() < 0) { 
      return false; 
     } else { 
      for (BookingDetails bd : l) { 
       if(bd.getFlight()==f){ 
        l.remove(l.indexOf(bd)) // index Number here.. 
       } 
      } 
     } 
    } 
+8

List.indexOf ओ (एन) है इसलिए मैं सामान्य रूप से इसका उपयोग करने से बचने की कोशिश करता हूं। – user393274

+3

इसके अलावा, indexOf हमेशा सूची में ऑब्जेक्ट का पहला मौका देता है, जो आप चाहते हैं कि हो सकता है। – IrishDubGuy

7

हाँ, बयान के लिए पहले एक काउंटर का प्रयोग करें। जैसे:

int i = 0; 
for (int s : ss) 
{ 
    // Some Code 
    System.out.println(i); 

    i++; 
} 
+1

सर्वोत्तम और सबसे कुशल उत्तर ;-) – BullyWiiPlaza

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