Iterator和可迭代的2D数组Java

时间:2015-11-17 12:39:27

标签: java iterator iterable

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

我有另一个类Matrix,我必须在其中创建两个执行迭代的方法(iteratorRowColumn和iteratorColumnRow),它们返回已创建为可供其他类访问的迭代器。

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

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

public Iterator iteratorRowColumn () {
    return new iteratorRow;
}

2 个答案:

答案 0 :(得分:1)

我认为作业的最后一句很好地解释了一个问题。我不确定它的哪一部分不清楚,所以让我详细解释一下:

  

数组必须实现Iterable接口

public class Matrix<T> implements Iterable<T>
  

可以配置(使用布尔值)

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

通过调用iterator()方法

返回两个迭代器中的哪一个
@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();
    }

}

答案 1 :(得分:0)

这样的事情:

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]);
    }
}