java Range类的这种实现有什么问题
我有一个作业,我正在做一个电子表格,这是我的老师交给我的
我被要求实现一个名为Range的类,它接受两个位置(每个位置由表示列和行的两个整数组成,例如new Position(1,2)),然后找到最低的行和列,并构造一个包含这两个值的新位置,这个位置是我的范围的左上角,行和列的最大值也是如此
然后我被要求做一个类,它包含一系列位置的总和。所以我决定,在我的范围内,它应该能够有一个方法,将所有位置放入ArrayList,这就是getPositions()方法
在这里您可以看到该类的源代码:
package spreadsheet;
import java.lang.Math;
import java.util.ArrayList;
public class Range {
private Position a;
private Position b;
private ArrayList<Position> positionList;
// Creates a new range, where it makes sure that the positions,
// appear in the right order, where the first position is the position
// of the upper left corner, and the second position is the lower right corner.
public Range(final Position a, final Position b) {
int minColumn = Math.min(a.getColumn(),b.getColumn());
int minRow = Math.min(a.getRow(),b.getRow());
int maxColumn = Math.max(a.getColumn(),b.getColumn());
int maxRow = Math.max(a.getRow(),b.getRow());
this.a = new Position(minColumn, minRow);
this.b = new Position(maxColumn, maxRow);
positionList = new ArrayList<>();
}
public ArrayList<Position> getPositions() {
int minColumn = this.a.getColumn();
int minRow = this.a.getRow();
int maxColumn = this.b.getColumn();
int maxRow = this.b.getRow();
for(int i = minColumn; i < maxColumn; i++) {
for(int j = minRow; j < maxRow; j++) {
positionList.add(new Position(i, j));
}
}
return positionList;
}
}
但问题是它并没有真正起作用,它返回的列表是空的,这是为什么?有人能发现错误吗
# 1 楼答案
我看没有理由不这样做。 好的,这里有几个问题:
positionList = new ArrayList<>();
将不会编译。它必须是positionList = new ArrayList<Position>();
i <= maxColumn
和j <= maxRow
)李>在我的测试中,我使用了点而不是位置,并为点添加了一些强制转换,使用int作为构造函数参数,但返回double。但我没有改变逻辑本身:
测试:
结果是:
编辑:
如果我再次调用getPoints(),我也会看到每个点两次。 创建一次列表,但每次调用getPoints()时都会添加点
有几种可能性:
2。编辑
选项:
选项:
选项: