2010-12-24 10 views
15

यह मेरे कोड का हिस्सा है।जावा ArrayList.remove() समस्या

Integer keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex)); 
someArrayList.remove(keyLocation); 

तो क्या मैं यहाँ कर रहा हूँ मैं keyLocation (reducedFD ArrayList में श्रृंखला का पहला घटना) आवंटित है। लेकिन जब मैं कुछ ऐरलेस्टिस्ट से उस कुंजी स्थान के साथ आइटम को हटाना चाहता हूं, तो यह काम नहीं करेगा।

अगर मैं मैन्युअल रूप से इनपुट:

someArrayList.remove(0); //Let's say 0 is the actual keyLocation 

यह वास्तव में काम करता है।

someArrayList.remove(keyLocation + 1); 

कोई संकेत:

क्या अजीब है कि निम्नलिखित कोड भी काम करता है है?

for (int KEYindex = 0; KEYindex < KeyPlus.size(); KEYindex++){ 

Integer keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex)); 

if (reducedFD.contains(KeyPlus.get(KEYindex))){ 

KeyPlus.add(reducedFD.get(keyLocation+1)); 
CheckedAttributesPlus.add(KeyPlus.get(KEYindex)); 
reducedFD.remove(keyLocation); 

} 
} 
+1

आप "यह काम नहीं करेगा" क्या मतलब है बनाने के बजाय इस कहते हैं?कंप्यूटर रीबूट करता है, मुझे लगता है? –

+1

"यह काम नहीं करेगा", मेरा मतलब है कि यह इसे बिल्कुल नहीं हटाता है। यह इसे अनदेखा करता है। – user461316

+0

क्या आप अपना कोड थोड़ा अधिक विस्तृत कर सकते हैं? थोड़ा और कोड .. – pringlesinn

उत्तर

64

समस्या निकालना विधि करने के लिए एक पूर्णांक से गुजर रहे हैं, न कि किसी पूर्णांक है:

यहां मुख्य पाश है। जब आप एक इंटीजर पास करते हैं, तो यह मानता है कि इंटीजर स्वयं ही वह है जिसे आप निकालने का प्रयास कर रहे हैं, उस सूचकांक के मूल्य पर नहीं। तुलना तरीकों

remove(Object o) 
remove(int i) 

ऐसा:

int keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex)); 
someArrayList.remove(keyLocation); 
+4

वह मेरे सिर पर ठीक उड़ गया। बहुत बहुत धन्यवाद। – user461316

+0

मैं इस पर एक घंटे से अधिक समय तक फंस गया था .. धन्यवाद दोस्त ... :) – LPD

+1

इसके लिए धन्यवाद, इतना आसान, अभी तक बेवकूफ गलती :) – test

1
int keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex)); //Use a primitive int 
    someArrayList.remove(keyLocation); 
3

List इंटरफ़ेस दो remove() तरीकों है, एक है कि एक Object प्राप्त करता है (और सूची से इस वस्तु को दूर करने की कोशिश करता है) और दूसरा वह जिसमें int प्राप्त करता है (और ऑब्जेक्ट को निकालने का प्रयास करता है जिसका सूचकांक दिया गया int है)।

आमतौर पर, Integer पैरामीटर के परिणाम ऑटो-अनबॉक्सिंग में, या स्वचालित रूप से int में स्वचालित रूप से परिवर्तित होते हैं। इस मामले में, कंपाइलर ऑटो-अनबॉक्सिंग का प्रयास नहीं करेगा, क्योंकि वहाँ एक पूरी तरह से अच्छी विधि है जो Object, और Integer instanceof Object प्राप्त करती है ... मुझे लगता है कि आपकी सूची List<Integer> नहीं है, यही कारण है कि यह शानदार रूप से विफल हो जाता है।

अपने Integer में एक int जोड़ना ऑटो-अनबॉक्सिंग को मजबूर करता है, और इसके अतिरिक्त परिणाम int - अन्य remove() विधि के लिए उपयुक्त है।

12

यहाँ संक्षिप्त विवरण है:

remove(Object o) // remove object 
remove(int index) // remove the object in that index 

यदि आप लिखना .remove(5) संकलक एक आदिम प्रकार के रूप में यह समझता है तो एक सूचकांक के रूप में और index(5). हटाने आप लिखना चाहिए आप वस्तु को निकालना चाहते हैं .remove(new Integer(5))

+0

बहुत बहुत धन्यवाद, अच्छा चाल;) – Q8Y

+0

नया इंटीजर() मेरे लिए पूरी तरह से काम करता है, thx! – Zakhar

+0

यह मेरे लिए भी बहुत धन्यवाद! – kojh

0

या आप बस कर सकते हैं:

someArrayList.remove(keyLocation + 0); 
0

आप ca n एक पूर्णांक

someArrayList.remove(integerKeyLocation.intValue()); 
संबंधित मुद्दे