Java Square Matrix列主要迭代器

时间:2015-01-29 01:53:36

标签: java matrix iterator

我很困惑将基于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那么错误..但如果有人能提供帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为你有几个错误

  1. column == matrix[0].length - 1还剩下1个要处理的元素时。
  2. 与行相等的类似问题。
  3. 您假设所有行的长度相同。我意识到这是一个矩阵,但如果你将columnmatrix[row].length进行比较
  4. 会更安全
  5. 您不需要if(...) then return false else return true。只需返回布尔表达式(例如,返回row < matrix.length && column < matrix[row].length
  6. 您在处理单元格之前递增行和列,因此您永远不会处理单元格[0] [0] - 您应该在获得返回值后递增
  7. 所以我建议像:

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