将元素放入排序列表
Putting elements into a sorted list
伙计们,我的方法需要将一个新元素添加到已经排序的列表中,即在适当的位置。关键是该方法必须以对角线排序添加对象。例如,
board.set(1,1,11);
board.set(2,4,33);
board.set(3,4,66);
board.set(3,2,44);
board.set(3,3,55);
board.set(1,4,88);
board.set(0,2,77);
board.set(0,5,99);
board.set(2,1,22);
结果应该是:
[(2,1,22), (3,2,44), (1,1,11), (3,3,55), (3,4,66), (0,2,77), (2,4,33), (1,4,88), (0,5,99)]
但是我的程序打印了这个:
[(3,4,66), (3,3,55), (3,2,44), (2,4,33), (2,1,22), (1,4,88), (1,1,11), (0,5,99), (0,2,77)]
即它没有将对象放在正确的位置。
我有一个 LinkedList<RowColElem<T>>leftDiagSeq
,其中添加了对象并将其放在适当的位置 "on the go"。我的代码缺少什么?
注意:我不允许使用比较器,比较接口!
代码
LinkedList<RowColElem<T>> rowColSeq;
private void sortedLeftDiagSeq(int row, int col, T x){
RowColElem<T> object = new RowColElem<T>(row, col, x);
ListIterator<RowColElem<T>> iter = leftDiagSeq.listIterator();
RowColElem<T> inListObject;
boolean added = false;
while(iter.hasNext()){
inListObject = iter.next();
if(object.getRow()-1 < inListObject.getRow() ||
object.getRow()-1 == inListObject.getRow() &&
object.getCol()-1 < inListObject.getCol()){
if( iter.hasPrevious() ){
iter.add(object);
}
}
}
}
主要标准是距主对角线 "distance" 个元素,负距离表示下三角矩阵。
if( object.getCol() - object.getRow() < inListObject.getCol() - inListObject.getRow()
||
object.getCol() - object.getRow() == inListObject.getCol() - inListObject.getRow() &&
object.getCol() < inListObject.getCol()){ ... }
我不确定最后一个学期。如果使用行号打破与主对角线距离相等的关系,您提供的数据也会产生预期的结果。可能这无关紧要,因为您希望在一条对角线内从左上角到右下角的顺序。
伙计们,我的方法需要将一个新元素添加到已经排序的列表中,即在适当的位置。关键是该方法必须以对角线排序添加对象。例如,
board.set(1,1,11);
board.set(2,4,33);
board.set(3,4,66);
board.set(3,2,44);
board.set(3,3,55);
board.set(1,4,88);
board.set(0,2,77);
board.set(0,5,99);
board.set(2,1,22);
结果应该是:
[(2,1,22), (3,2,44), (1,1,11), (3,3,55), (3,4,66), (0,2,77), (2,4,33), (1,4,88), (0,5,99)]
但是我的程序打印了这个:
[(3,4,66), (3,3,55), (3,2,44), (2,4,33), (2,1,22), (1,4,88), (1,1,11), (0,5,99), (0,2,77)]
即它没有将对象放在正确的位置。
我有一个 LinkedList<RowColElem<T>>leftDiagSeq
,其中添加了对象并将其放在适当的位置 "on the go"。我的代码缺少什么?
注意:我不允许使用比较器,比较接口!
代码
LinkedList<RowColElem<T>> rowColSeq;
private void sortedLeftDiagSeq(int row, int col, T x){
RowColElem<T> object = new RowColElem<T>(row, col, x);
ListIterator<RowColElem<T>> iter = leftDiagSeq.listIterator();
RowColElem<T> inListObject;
boolean added = false;
while(iter.hasNext()){
inListObject = iter.next();
if(object.getRow()-1 < inListObject.getRow() ||
object.getRow()-1 == inListObject.getRow() &&
object.getCol()-1 < inListObject.getCol()){
if( iter.hasPrevious() ){
iter.add(object);
}
}
}
}
主要标准是距主对角线 "distance" 个元素,负距离表示下三角矩阵。
if( object.getCol() - object.getRow() < inListObject.getCol() - inListObject.getRow()
||
object.getCol() - object.getRow() == inListObject.getCol() - inListObject.getRow() &&
object.getCol() < inListObject.getCol()){ ... }
我不确定最后一个学期。如果使用行号打破与主对角线距离相等的关系,您提供的数据也会产生预期的结果。可能这无关紧要,因为您希望在一条对角线内从左上角到右下角的顺序。