繁体   English   中英

2D数组Java的迭代器和可迭代

[英]Iterator and iterable for an 2D array Java

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

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

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

我怎样才能做到这一点? 我必须做一些吸气剂方法吗? 像这样吗

public Iterator iteratorRowColumn () {
    return new iteratorRow;
}

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

数组必须实现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();
    }

}

像这样:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM