2014-09-28 3 views
0

У меня проблема с алгоритмом на Java. Этот алгоритм должен удалить элементы из списка, но только один раз (первый элемент). Я попробовал это, я скомпилировать хорошо, но проблемы, когда я запустить его ...Элементы удаления элементов PositionList

/** 
* Returns in "list" the previous content of "list" after removing "subList" if it is present in "list" 
* 
* @param list  (input/output) The list where search and remove the first occurrence of "subList" 
* @param subList (input)   The sub list to search within "list" 
*/ 

public void removeSubList(PositionList<E> list,PositionList<E> subList) { 
    Position<E> cursor1 = list.first(); 
    Position<E> cursor2 = subList.first(); 
    while(cursor1 != null && cursor2 != null) 
     if(cursor1.element()==cursor2.element()){ 
      Position<E> borrar = cursor1; 
      cursor1=list.next(cursor1); 
      cursor2=list.next(cursor2); 
      list.remove(borrar); 
     } 


} 

Это то, что я хочу на выходе консоли:

removeSubList ([3,2,3,4,5 , 3], [3]) [2,3,4,5,3]

removeSubList ([2,3,4,5,3,4], [3,4]) ----- ---> [2,5,3,4]

removeSubList ([3,2,3,4,7], [3,7]) --------> [3,2] , 3,4,7]

удалятьS ubList ([3,2,3,4,5,3], []) --------> [3,2,3,4,5,3]

removeSubList ([], [3,7]) --------> []

removeSubList (нуль, [3,7]) --------> нулевой

removeSubList ([3, 2,3,4,5,3], null) --------> [3,2,3,4,5,3]

Удалить только первое.

Спасибо за помощь.

+0

Какие проблемы? Объясните пожалуйста: – Alboz

ответ

0

Во-первых, я хочу задать вопрос: Этот выход правильно?

removeSubList([3,2,3,4,7],[3,7])--------> [3,2,3,4,7] 

не должно быть [2,3,4]?

Ну, давайте посмотрим на этот код:

while(cursor1 != null && cursor2 != null) 
    if(cursor1.element()==cursor2.element()){ 
     Position<E> borrar = cursor1; 
     cursor1=list.next(cursor1); 
     cursor2=list.next(cursor2); 
     list.remove(borrar); 
    } 
  1. Если они равны, то вы выбираете следующий, но когда они не являются чем то, бесконечный цикл? Вы должны всегда получать следующий элемент, не только тогда, когда элементы равны.

  2. Я не уверен, что '==' - лучший способ проверить что-то равное чему-то, попробуйте .equals().

  3. Следующая вещь: вы не должны изменять (особенно удалить что-либо) список, через который вы выполняете итерацию. Создайте новый список, который будет вашим списком результатов.

Пожалуйста, исправьте эти вещи, и если у вас возникнут дополнительные проблемы, опишите их и напишите выходные данные, которые вы получаете.

+0

Да, я не могу выполнить вывод: removeSubList ([3,2,3,4,7], [3,7]) --------> [3,2,3,4, 7] должно быть [2,3,4] – Javi

+0

Как я могу использовать равные там? С этим легче справиться? – Javi

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