java中的迭代

java中的迭代,java,iterator,Java,Iterator,我必须制作一个自定义迭代器,它可以无休止地遍历数组。考虑到我以前从未在java中使用过迭代器,所以我不知道如何做到这一点。如果有人能帮我解决问题并向我解释,我将非常感激 public class Numbers{ private int[] array; public Numbers(int[] array){ this.array = array } public static void main(String[] args) { Numbers n

我必须制作一个自定义迭代器,它可以无休止地遍历数组。考虑到我以前从未在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();
            }
        }
    }
}
公共类编号{
私有int[]数组;
公共数字(int[]数组){
this.array=array
}
公共静态void main(字符串[]args){
数字n=新数字();
迭代器num=n.sequence();
对于(int i=0;i<10;i++){
if(num.hasNext()){
System.out.print(num.next()+“”);
System.out.println();
}
}
}
}

使用迭代器基本上都是一样的

首先从数组中获取迭代器:

Iterator iterator = yourArray.iterator();
第二次迭代,当它有项目时:

while(iterator.hasNext()) {
  Object element = iterator.next(); 
}

这就是迭代器的基本工作原理。本例使用
列表
,但您可以对实现的任何集合使用迭代器

要使用for循环无休止地在阵列中循环,请执行以下操作:

for (int i = 0; i < myArray.length; i++) {
    myArray[i];
    // do something

    if (i == myArray.length - 1) {
        i = 0; // reset the index
    }
}
for(int i=0;i
或者,您可以让您的
数字
类直接实现
Iterable

请参见以下内容:

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() {}
        };
    }
}
这将导致无限循环:

1
2
3
1
2
3
1
2

相关javadocs:
-
-
另一种方法是使用无限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;
}

你应该告诉我们你的数字类的代码。另外,如果这是家庭作业,你应该给它加上这样的标签。@kurtzbot我怀疑我们已经在研究整个数字类了……迭代器的大小根据定义是“有限的”。我想您可以将for循环包装在“for(;)”循环中?而且,我不能更改main中当前的任何代码。但是,我可以添加到它。@djangofan,实际上您可以重写next()方法,让它基于当前索引返回一组“无限”数据。就拿A.R.S.的答案为例,我理解。问题是我必须做一个“自定义”迭代器,它无限地遍历数组。你说的自定义迭代器是什么意思?我不太清楚你想要什么修改for循环中的循环计数器?Dangerous@vicfran-OP需要一个无限循环,因此他/她将接收一个无限循环。请参见此解决方案中的next代码不是public int getNext()?或者我只是遗漏了什么?
int
在这种情况下不起作用,您需要
Integer
包装类来正确重写
Iterator
接口的
next
方法。接口指定
next()
。好的,我现在明白了。谢谢你的帮助。关于模数的问题仍然有点不确定,但我想我会解决的。
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() {}
        };
    }
}
Numbers n = new Numbers(new int[]{1,2,3});
for (int i : n)
    System.out.println(i);  // or anything else
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;
}