二维数组的迭代器和可迭代器 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();
}
}
我为一个数组创建了两个迭代器:第一个按行运行数组 (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();
}
}