Java Square Matrix列主迭代器

Java Square Matrix column major iterator

我对基于 T[][] 数组为方矩阵组合列主迭代器感到很困惑...

我们有一个 get 方法,它是矩阵 [i][j] 的 get(row, column),其中 i 是行,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. column == matrix[0].length - 1还有1个元素需要处理时。
  2. 行相等的类似问题。
  3. 您假设所有行的长度都相同。我意识到这是一个矩阵,但如果你将 columnmatrix[row].length
  4. 进行比较会更安全
  5. 您不需要 if(...) then return false else return true。只是 return 布尔表达式(例如 return row < matrix.length && column < matrix[row].length
  6. 您在处理单元格之前递增行和列,因此您永远不会处理单元格 [0][0] - 您应该在将值设为 return
  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];
    }
}