2012-10-18 10 views
13

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

Stack<YourObject> stack = ... 

Iterator<YourObject> iter = stack.iterator(); 

while (iter.hasNext()){ 
    System.out.println(iter.next()); 
} 

या वैकल्पिक रूप से, अगर आप सिर्फ उन सब को प्रिंट करना चाहते हैं का उपयोग enhanced-for loop:

+0

सार्वजनिक इटरेटर इटरेटर() { \t \t \t} –

उत्तर

16

बस iterator() के माध्यम से Iterator मिल

for(YourObject obj : stack) 
{ 
    System.out.println(obj); 
} 
+0

इटरेटर बिना - जब {... currentSymbol = stack.pop(); ...} –

+2

@HiteshSahu चलाने के बाद (stack.isEmpty()!) आपका कोड, 'स्टैक' खाली होगा क्योंकि 'पॉप()' स्टैक के शीर्ष को हटा देता है। – Baz

+0

सहमत हैं। मैं एक कंपाइलर का निर्माण कर रहा था और मैं syntex पार्सिंग के लिए इस बदलाव का उपयोग कर रहा था। –

1
Stack<Object> myStack; // obtain your Stack object 

Iterator iterator = myStack.iterator(); 
while (iterator.hasNext()) { 
    Object object = iterator.next(); 
} 
+1

कृपया कुछ स्पष्टीकरण भी लिखें, यह कोड क्या करता है। – Lucifer

4

आप कर सकता है:

for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) { 
    MyObject myObject = iterator.next(); 
    myObject.doStuff(); 
} 
1

लगता है जैसे आपने एक कस्टम स्टैक क्लास लागू किया है। आपके "कुछ" को Iterable इंटरफ़ेस को कार्यान्वित करना चाहिए और Iterator का कार्यान्वयन प्रदान करना चाहिए।

public class MySomethingThatIsAStack<T> implements Iterable<T> { 

    @Override 
    public Iterator<T> iterator() { 
    return new Iterator<T>() { 
     // your implementation of the iterator, namely the 
     // methods hasNext, next and remove 
    } 
    } 
} 
0

I am working on something that is implementing a stack using queues

है कि आप प्रयोग नहीं कर रहे मतलब जावा Stack कार्यान्वयन? http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html यह वेक्टर पर कतार नहीं है।

यदि आप जावा Stack कार्यान्वयन का उपयोग कर रहे हैं, तो आप अन्य उत्तरों की तरह इटरेटर का उपयोग कर सकते हैं। अन्यथा, यदि यह एक कस्टम Stack है, तो आपको Iterable इंटरफ़ेस को लागू करना होगा। और फिर आप अन्य उत्तरों की तरह कुछ कर सकते हैं।