HuangRH 发表于 2020-5-14 22:17:47

为什么不能迭代

本帖最后由 HuangRH 于 2020-5-15 06:29 编辑

ResizingArrayStack.java:

import java.util.Iterator;
public class ResizingArrayStack<Item> implements Iterable<Item>{
        private Item[] a;
        private int N=0;
        public ResizingArrayStack(){
                a=(Item[])new Object;
        }
        public void push(Item item){
                if(N==a.length)resize(2*a.length);
                a=item;
        }
        public Item pop(Item item){
                Item temp= a[--N];
                a=null;
                if(N>0 && N==a.length/4)resize(a.length/2);
                return temp;
        }
        public boolean isEmpty(){
                return N==0;
        }
        public int size(){
                return N;
        }
        private void resize(int max){
                Item[] temp=(Item[])new Object;
                for(int i=0;i<a.length;i++){
                        temp=a;
                }
                a=temp;
        }
    public Iterator<Item> iterator() {
      return new ReverseArrayIterator();
    }
    private class ReverseArrayIterator implements Iterator<Item> {
      private int i;
      public ReverseArrayIterator() {
            i = N-1;
      }
      public boolean hasNext() {
            return i >= 0;
      }
      public void remove() {
      }
      public Item next() {
            return a;
      }
    }
}

Iterable.java:
import java.util.Iterator;
public interface Iterable<Item> {
        Iterator<Item> iterator();
}


然后这里是主程序
import java.util.Iterator;
public class Main {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                ResizingArrayStack<String> a=new ResizingArrayStack<String>();
                a.push("aaa");
                a.push("bbb");
                System.out.println(a.size());
                Iterator<String> i=a.iterator();
                while(i.hasNext()){
                        String s=i.next();
                        System.out.println(s);
                }
                for(String s:a){
                        System.out.println(s);
                }
        }
}

while循环可以,for循环不行,我快死了{:10_266:}

HuangRH 发表于 2020-5-14 22:44:31

不用看了,我是傻逼{:10_266:}

永恒的蓝色梦想 发表于 2020-5-14 23:10:45

HuangRH 发表于 2020-5-14 22:44
不用看了,我是傻逼

我看了半天没看出问题,可能我是傻逼吧{:10_266:}

HuangRH 发表于 2020-5-15 06:22:31

永恒的蓝色梦想 发表于 2020-5-14 23:10
我看了半天没看出问题,可能我是傻逼吧

不用自己写Iterable.java,我多写了{:10_266:}
页: [1]
查看完整版本: 为什么不能迭代