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 那是错误的...但是如果有人能提供帮助,我们将不胜感激。
在我看来你有几个错误
- 当
column == matrix[0].length - 1
还有1个元素需要处理时。
- 行相等的类似问题。
- 您假设所有行的长度都相同。我意识到这是一个矩阵,但如果你将
column
与 matrix[row].length
进行比较会更安全
- 您不需要
if(...) then return false else return true
。只是 return 布尔表达式(例如 return row < matrix.length && column < matrix[row].length
- 您在处理单元格之前递增行和列,因此您永远不会处理单元格 [0][0] - 您应该在将值设为 return
之后递增
所以我建议如下:
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];
}
}
我对基于 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 那是错误的...但是如果有人能提供帮助,我们将不胜感激。
在我看来你有几个错误
- 当
column == matrix[0].length - 1
还有1个元素需要处理时。 - 行相等的类似问题。
- 您假设所有行的长度都相同。我意识到这是一个矩阵,但如果你将
column
与matrix[row].length
进行比较会更安全
- 您不需要
if(...) then return false else return true
。只是 return 布尔表达式(例如 returnrow < matrix.length && column < matrix[row].length
- 您在处理单元格之前递增行和列,因此您永远不会处理单元格 [0][0] - 您应该在将值设为 return 之后递增
所以我建议如下:
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];
}
}