我很困惑将基于T [] []数组的方阵的列主迭代器放在一起......
我们有一个get方法,它是矩阵[i] [j]的get(row,column),其中i是row,j是列...
private class SquareMatrixIterator implements Iterator<T> {
//Do not add any instance variables
private int row;
private int column;
@Override
public boolean hasNext() {
if(row >= (matrix.length - 1) && column >= (matrix[0].length - 1)) {
return false;
} else {
return true;
}
}
@Override
public T next() {
if (hasNext()) {
if (row < matrix.length - 1) {
row++;
} else {
row = 0;
column++;
}
return get(row, column);
} else {
throw new NoSuchElementException();
}
}
}
是我到目前为止所考虑的代码,但绝对不能正常工作......我不确定我是否做错了并且应该使用while循环...或者如果它只是hasNext那么错误..但如果有人能提供帮助,我们将不胜感激。
答案 0 :(得分:0)
我认为你有几个错误
column == matrix[0].length - 1
还剩下1个要处理的元素时。column
与matrix[row].length
进行比较if(...) then return false else return true
。只需返回布尔表达式(例如,返回row < matrix.length && column < matrix[row].length
所以我建议像:
public boolean hasNext() {
return row < matrix.length && col < matrix[row].length;
}
public T next() {
if (!hasNext()) {
throw ...
} else if (col < matrix[row].length) {
return matrix[row][col++];
} else {
return matrix[row++][col = 0];
}
}