2016-04-06 10 views
1

ブックのリンクされたリストをタイトルでアルファベット順に並べ替えるために挿入の並べ替えを使用しようとしています。ブックオブジェクトのリンクリストを使用した挿入の並べ替え

私がこれまで行ってきた:LinkedListの中

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

     } 
    } 

addメソッド:

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

insertSortedのforループでbook [i]と照合する必要があります。 if文の何もiに依存しません。 –

+0

最初の本を2回繰り返すと、ループに何か問題がありますか? – Nicky

答えて

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

    } 

この文では、現在比較中のNodeをインクリメントしていません。 for(;;)ループの各繰り返しでは、Listのこの最初の要素に追加されている新しいBookを比較しています。

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::必要なbreak文を付属、あなたが本に本を追加した後@Eden呂ごと

1

に答えるように、あなたがループを切断する必要が

次のコード例は、この問題を解決する必要があります

books.add(book、i); 休憩。

+0

それ以外の場合は同じ書籍を複数回追加します –

関連する問題