2016-04-06 4 views
1

J'essaie d'utiliser le tri par insertion pour trier la liste des livres liés par ordre alphabétique par titre.tri par insertion à l'aide de la liste chaînée pour les objets Livre

ce que je l'ai fait jusqu'à présent:

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

     } 
    } 

la méthode add dans chaînée:

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

exactement ce que je fais mal?

+0

Dans la boucle for de insertSorted, vous devez vérifier le livre [i]. Rien dans l'instruction if ne dépend de i. –

+0

il répète le premier livre deux fois, y at-il quelque chose de mal avec la boucle ?? – Nicky

Répondre

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

    } 

Avec cette déclaration (ci-dessus), vous n'êtes pas incrémentant le Node courant qui est comparé. À chaque itération de la boucle for(;;), vous comparez le nouveau Book qui est ajouté à ce premier élément dans le List.

L'exemple de code ci-dessous devrait résoudre ce problème:

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: Inclus instruction break nécessaire, selon @Eden Lu répondre

1

Après avoir ajouté le livre des livres, vous avez besoin de briser la boucle

books.add (livre, i); pause;

+0

sinon il va ajouter les mêmes livres plusieurs fois –