在java中迭代

Req*_*iem 4 java iterator

我必须创建一个自定义迭代器,它通过一个数组无休止地迭代.考虑到我之前从未使用过java中的迭代器,我不知道如何做到这一点.如果有人能帮我解释并向我解释,我会非常感激.

public class Numbers{   
private int[] array;

public Numbers(int[] array){ 
    this.array = array
}
    public static void main(String[] args) {

        Numbers n = new Numbers();
        Iterator num = n.sequence();
        for(int i = 0; i < 10; i++){
            if (num.hasNext()){
                System.out.print(num.next() + " ");
                System.out.println();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ars*_*jii 5

见下文:

public class Numbers implements Iterable<Integer> {
    private int[] array;
    private int i;
    public Numbers(int[] array) { 
        this.array = array;
        i = 0; 
    }

    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            @Override
            public boolean hasNext() { return true; }

            @Override
            public Integer next() {
                int j = i;
                i = (i + 1) % array.length;
                return array[j];
            }

            @Override
            public void remove() {}
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

Numbers n = new Numbers(new int[]{1,2,3});
for (int i : n)
    System.out.println(i);  // or anything else
Run Code Online (Sandbox Code Playgroud)

这将导致无限循环:

1
2
3
1
2
3
1
2
...

相关的javadocs:
- Iterator
- Iterable


另一种方法就是拥有一个无限的while循环:

int[] array = new int[]{1, 2, 3};
int i = 0;
while (true) {
    System.out.println(array[i]);  // or anything else
    i = (i + 1) % array.length;
}
Run Code Online (Sandbox Code Playgroud)