添加到排序的“linkedList”中



朋友们,我的方法需要添加一个新元素到已经排序的列表中,即在适当的位置。关键是该方法检查最低的行索引,然后比较其颜色。例如,

    board.set(2,2, 11);
    board.set(-1,0,22);
    board.set(-1,2,33);
    board.set(1,0,44);
    board.set(3,0,55);
    board.set(3,1,66);
    board.set(3,3,77);
    board.set(3,2,88);
    board.set(-1,1,99);

结果应该是:

[(-1,0,22), (-1,1,99), (-1,2,33), (1,0,44),  (2,2,11), (3,0,55), (3,1,66), (3,2,88), (3,3,77)]

但是我的程序打印了这个:

[(-1,0,22), (-1,1,99), (3,2,88), (3,3,77), (3,1,66), (3,0,55), (1,0,44), (-1,2,33), (2,2,11)]

。它没有把物体放到合适的位置。

我有一个LinkedList<RowColElem<T>>rowColSeq,其中对象被添加并放入适当的位置"在运行中"。我的代码缺少什么?

注意: 我不允许使用比较器,可比接口!

LinkedList<RowColElem<T>> rowColSeq; // Is not empty, already contains objects!
 private void sortedRowColSeq(int row, int col, T x){
      RowColElem<T> object = new RowColElem<T>(row, col, x);
      ListIterator<RowColElem<T>> iter = rowColSeq.listIterator();
      RowColElem<T> inListObject;
      boolean added = false;
      while(iter.hasNext()){
          inListObject = iter.next();
          if(object.getRow() < inListObject.getRow()){
              iter.previous();
              iter.add(object);
              undoStack.push(object);
              added = true;
              break;
          }
          else if(object.getRow() == inListObject.getRow()){
              if(object.getCol() < inListObject.getCol()){
                  iter.previous();
                  iter.add(object);
                  undoStack.push(object);
                  added = true;
              }
          }
          else{
              iter.add(object);
              undoStack.push(object);
              added = true;
              break;
            }
          }
     }

如果新元素大于某些元素,则不能添加。您必须在一个更大的字符之前或末尾输入。

 boolean added = false;
 while(iter.hasNext()){
      inListObject = iter.next();
      if(object.getRow() < inListObject.getRow() ||
         object.getRow() == inListObject.getRow()) &&
         object.getCol() < inListObject.getCol() ){
          if( iter.hasPrevious() ){
              iter.previous();
              iter.add(object);
          } else {
              rowColSeq.addFirst( object );
          }
          undoStack.push(object);
          added = true;
          break;
      }
 }
 if( ! added ){
      rowColSeq.addLast(object);
      undoStack.push(object);
      added = true;
 }

使用iter1 .previous()的方法在某些情况下注定会失败,因此我添加了一个测试和替代代码。

相关内容

  • 没有找到相关文章

最新更新