2012-10-25 17 views
7

में कनवर्ट करना मुझे वर्कशीट पर कोई समस्या है जो एक गणना को एक इटरेटर में परिवर्तित करने के लिए एडाप्टर बनाना है। जब मैं निम्नलिखित कोड को चलाने का प्रयास करता हूं तो मुझे एक शून्य सूचक अपवाद मिलता है।एक गणना को Iterator

import java.util.Vector; 
import java.util.Arrays; 
import java.util.Enumeration; 
import java.util.Iterator; 

public class ConvertEnumeration { 

    public static void main(String [] args) { 

     int [] ourArray = {0,1,2,3,4,5,6,7,8,9}; 
     Vector vector = new Vector(Arrays.asList(ourArray)); 

     //Get Enumerator 
     Enumeration enumerator = vector.elements(); 

     EnumerationToIterator enumToIt = new EnumerationToIterator(enumerator); 
     while(enumToIt.hasNext()) { 
      System.out.println(enumToIt.next()); 
     } 
    } 

} 


//Convert our enumeration to Iterator! 
class EnumerationToIterator implements Iterator { 

    //Our enumeration 
    Enumeration enmueration; 

    //Constructor 
    public EnumerationToIterator(Enumeration enmueration){ 
     enmueration = this.enmueration; 
    } 

    //Our Methods 
    public boolean hasNext(){ 
     return enmueration.hasMoreElements(); 
    } 

    public Object next(){ 
     return enmueration.nextElement(); 
    } 

    public void remove(){ 
     throw new UnsupportedOperationException(); 
    } 

} 

नोट करने के लिए एक और मुद्दा है कि मैं पूर्णांक के बाहर मुद्रित नहीं कर सकते गणन से के बाद मैं पहली जगह में यह बनाया है है।

उत्तर

3
public class ConvertEnumeration { 

    public static void main(String [] args) { 

     // int [] ourArray = {0,1,2,3,4,5,6,7,8,9}; 
     Vector<Integer> vector = new Vector<Integer>(Arrays.asList(0,1,2,3,4,5,6,7,8,9)); 

     //Get Enumerator 
     Enumeration<Integer> enumerator = vector.elements(); 

     EnumerationToIterator<Integer> enumToIt = new EnumerationToIterator<Integer>(enumerator); 
     while(enumToIt.hasNext()) { 
      System.out.println(enumToIt.next()); 
     } 
    } 

}  

//Convert our enumeration to Iterator! 
    class EnumerationToIterator<T> implements Iterator<T> { 

     //Our enumeration 
     Enumeration<T> enmueration; 

     //Constructor 
     public EnumerationToIterator(Enumeration<T> enmueration){ 
      this.enmueration = enmueration; 
     } 

     //Our Methods 
     public boolean hasNext(){ 
      return enmueration.hasMoreElements(); 
     } 

     public T next(){ 
      return enmueration.nextElement(); 
     } 

     public void remove(){ 
      throw new UnsupportedOperationException(); 
     } 
    } 
+0

कोई पासा आदमी, अभी भी कचरा छपाई नहीं :( – TomSelleck

+0

आपकी मुख्य कक्षा सहायता में सामान्य प्रकार जोड़ना? मेरा अद्यतन उत्तर देखें। – jlordo

+0

कोशिश की गई दोस्त अभी भी कोई किस्मत, रेखा, "वेक्टर वेक्टर = नया वेक्टर (Arrays.asList (ourArray)); निर्माता वेक्टर (सूची ) अपरिभाषित है "त्रुटि, देता है" " – TomSelleck

5

आपके कन्स्ट्रक्टर में गलत असाइनमेंट। इसे this.enmueration = enmueration;
enmueration कन्स्ट्रक्टर तर्क है, और this.enmueration ऑब्जेक्ट विशेषता है।

+0

आह स्कूल के लड़के त्रुटि, धन्यवाद !! त्वरित प्रश्न, जो त्रुटि से छुटकारा पा लिया लेकिन जब मैं मूल मानों को मुद्रित करने का प्रयास करता हूं, तो यह केवल एक स्मृति पता (मुझे लगता है) प्रिंट करता है, उदाहरण के लिए "[I @ 38f0b51d"। एक int में डालने का प्रयास करने से यह त्रुटि मिलती है, "मुझे java.lang.Integer पर नहीं डाला जा सकता" – TomSelleck

+0

आपके 'System.out.println();' के अंदर क्या है? – jlordo

+0

System.out.println (enumToIt.next()); कचरा देता है और System.out.println ((int) enumToIt.next()) एक त्रुटि देता है – TomSelleck

24

पहिया बदलने की कोई जरूरत नहीं है। बस Collections.list(Enumeration<T> e) का उपयोग करें, जो ArrayList<T> देता है। फिर Iterator प्राप्त करने के लिए ArrayList.iterator() का उपयोग करें।

+1

इस सही जवाब –

+2

एक एडाप्टर क्योंकि नंबर एक बेहतर विकल्प है है तत्वों का विशाल हो सकता है और सभी तत्वों के साथ 'ऐरेलिस्ट' मेमोरी खपत को बढ़ाता है। –

+1

@ क्रिस्टियन यूलेनबूम मैं इसे बेहतर नहीं कहूंगा क्योंकि ऐसी स्थितियां हैं जिनमें यह बेहतर है। यह उत्तर अधिकांश उपयोगों के लिए उत्कृष्ट है। – Blrp

5

जावा 9 एक नया डिफ़ॉल्ट विधि प्रदान करता है: Iterator<E> asIterator()

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