二维数组的迭代器和可迭代器 Java

Iterator and iterable for an 2D array Java

我为一个数组创建了两个迭代器:第一个按行运行数组 (iteratorRow),然后按列运行,第二个,先按列运行,然后按行运行 (iteratorColumn)。

我有另一个 class,Matrix,我必须在其中创建两个执行迭代的方法(iteratorRowColumn 和 iteratorColumnRow),return 已创建的迭代器可供其他 classes.

数组必须实现 Iterable 接口,并且可以通过调用 iterator() 方法配置(使用布尔值)应该返回两个迭代器中的哪一个。

我该怎么做?我必须做一些吸气剂方法吗?是这样的吗?

public Iterator iteratorRowColumn () {
    return new iteratorRow;
}

像这样:

public class Proba {

    Integer[][] array = new Integer[10][10];

    public class MyIter implements Iterator<Integer> {

        private Integer[] integers;
        private int index = 0;;

        public MyIter(Integer[] integers) {
            this.integers = integers;
        }

        @Override
        public boolean hasNext() {
            return index < integers.length -1 ;
        }

        @Override
        public Integer next() {
            return integers[index];
        }

        @Override
        public void remove() {
            //TODO: remove
        }
    }

    public static void main(String[] args) {
        Iterator<Integer> iter = new Proba().getIterator(1);
        while (iter.hasNext()) {
            System.out.println(iter.next());
        }
    }

    public Iterator<Integer> getIterator(int row) {
        return new MyIter(array[row]);
    }
}

我觉得assignment的最后一句很好的说明了一个问题。我不确定哪一部分不清楚所以让我详细解释一下:

The array must implement the Iterable interface

public class Matrix<T> implements Iterable<T>

may be configured (using a Boolean)

public Matrix(boolean defaultRowColumnIterator) {
    this.defaultRowColumnIterator = defaultRowColumnIterator;
}

which of the two iterators it shall be returning by calling iterator() method

@Override
public Iterator<T> iterator() {
    return defaultRowColumnIterator ? iteratorRowColumn() : iteratorColumnRow();
}

这是一个可编译的例子:

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

    T[][] array;
    boolean defaultRowColumnIterator;

    public Matrix(boolean defaultRowColumnIterator) {
        this.defaultRowColumnIterator = defaultRowColumnIterator;
    }

    // other methods and constructors

    public Iterator<T> iteratorRowColumn() {
        return null; // your current implementation
    }

    public Iterator<T> iteratorColumnRow() {
        return null; // your current implementation
    }

    @Override
    public Iterator<T> iterator() {
        return defaultRowColumnIterator ? iteratorRowColumn() : iteratorColumnRow();
    }

}