2015-10-11 2 views
0

Люди, мой метод должен добавить новый элемент в уже отсортированный список, т. Е. В правильное положение. Дело в том, что метод должен добавлять объекты в диагональный вид. Например,Ввод элементов в отсортированный список

 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, где объекты добавляются и помещаются в правильное положение «в движении». Что мой код отсутствует?

ПРИМЕЧАНИЕ. Мне не разрешено использовать компараторы, сопоставимый интерфейс!

код

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); 
       } 
      } 
     } 


    } 
+1

Если вы беспокоитесь о проблемах с копирайтом, то, возможно, вам не следует публиковать код в первую очередь или спрашивать в открытом форуме, таком как SE, потому что код все еще доступен в ревизии. – Bon

+0

http://meta.stackoverflow.com/questions/251923/what-to-do-when-an-op-asks-to-delete-my-code-from-my-answer –

ответ

1

Первичный критерий является элементы «расстояние» от главной диагонали, отрицательные расстояния, указывающие нижнюю треугольную матрицу.

if(object.getCol() - object.getRow() < inListObject.getCol() - inListObject.getRow() 
    || 
    object.getCol() - object.getRow() == inListObject.getCol() - inListObject.getRow() && 
    object.getCol() < inListObject.getCol()){ ... } 

Я не уверен о последнем сроке. Данные, которые вы предоставили, также приведут к ожидаемому результату, если номера строк используются для разрыва связи равного расстояния от главной диагонали. Вероятно, это не имеет значения, так как вы хотите заказать сверху вниз вправо-вправо по одной диагонали.

+0

OMG! Я люблю тебя! Я делал с вложенными циклами, которые им не позволяли, но не могли придумать ничего. Спасибо огромное! @laune .... Кстати, как долго вы занимались программированием? Кажется, вы выбрали мою проблему очень легко, когда я делал эту проблему часами! –

+1

Я думаю, что это больше вопрос опыта работы с матрицами в математике, где вы узнаете об индексах для элементов в определенных «местах». Это было давно, но, похоже, нам нужно было хорошо это изучить ... – laune

Смежные вопросы