2016-04-06 4 views
1

Я пытаюсь использовать сортировку вставки для сортировки связанного списка книг по алфавиту по названию.Вставка сортировки с использованием связанного списка для объектов книги

то, что я сделал до сих пор:

public void insertSorted(Book book){ 
    if(books.getfirst()==null) 
     books.addFirst(book); //books is the LinkedList name 
    Node<Book> current =books.getfirst(); 
    for(int i=0; i<books.getSize(); i++){ 
     if(book.getTitle().compareToIgnoreCase(current.element.getTitle())<=0){ 
      books.add(book, i); 

     } 
    } 

метод добавить в LinkedList:

public void add(Object x,int index){ 
    if(index==0)addFirst(x); 
    else if(index>=getSize())addLast(x); 
    else{ 
     Node current=first; 
     for(int i=0; i<index-1;i++) 
      current=current.next; 
     Node temp = new Node(x); 
     temp.next=current.next; 
     current.next=temp; 
     count++; 
    } 
} 

, что именно я делаю неправильно?

+0

В петле for insertSorted вы должны проверить книгу [i]. Ничто в выражении if не зависит от i. –

+0

повторяет первую книгу дважды, что-то не так с петлей ??? – Nicky

ответ

1
for(int i=0; i<books.getSize(); i++){ 
    if(book.getTitle().compareToIgnoreCase(current.element.getTitle())<=0){ 
     books.add(book, i); 

    } 

С этим утверждением (выше), вы не приращением тока Node который сравниваемых. На каждой итерации цикла for(;;) вы сравниваете новый Book, который добавляется к этому первому элементу в List.

Ниже пример кода должен это исправить:

for(int i=0; i<books.getSize(); i++){ 
    if(book.getTitle().compareToIgnoreCase(current.element.getTitle())<=0){ 
     books.add(book, i); 
     break; 
    } 
    else { 
     current = current.next; 
    } 

EDIT: включено требуемое утверждение перерыв, согласно @Eden Lu ответить

1

После того, как вы добавите книгу книг, вы должны разорвать петлю

books.add (book, i); break;

+0

, иначе он будет добавлять одни и те же книги несколько раз –