我为数组创建了两个迭代器:第一个按行(iteratorRow)运行数组,然后按列运行,第二个运行按列,然后按行运行,然后按行运行(iteratorColumn)。
我有另一个类Matrix,我必须在其中创建两个执行迭代的方法(iteratorRowColumn和iteratorColumnRow),它们返回已创建为可供其他类访问的迭代器。
数组必须实现Iterable接口,并且可以配置(使用布尔值)两个迭代器中的哪一个应该通过调用iterator()方法来退还。
我该怎么做?我必须做一些吸气剂方法吗?像这样的东西?
public Iterator iteratorRowColumn () {
return new iteratorRow;
}
答案 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]);
}
}