2012-06-18 4 views
3

maintenant je suis à cela depuis un moment et il y a une erreur que je suis. Maintenant, le programme que je fais est un carnet d'adresses, et j'utilise un tri d'insertion pour trier une liste d'objets que j'appelle des livres (entrées d'adresse). Maintenant, j'ai vite découvert que mon trieur ne triait pas correctement donc j'ai fait un programme simple pour tester le trieur et encore une fois ça ne marche pas. Je me demandais si vous pouviez y jeter un coup d'oeil et m'aider.Tri d'insertion triant un ArrayList problèmes

Voici mon Sorter:

import java.util.ArrayList; 
public class Sorts { 

    /** 
    * Sorts and array of integer from low to high 
    * pre: none 
    * post: Integers has been sorted from low to high 
    */ 
    public static void insertionSort(ArrayList<String> test) { 
     Comparable temp; 
     int previousIndex; 
     ArrayList<String> objectSort = test; 

     for (int i = 1; i < objectSort.size(); i++) { 
      temp = objectSort.get(i); 
      previousIndex = i - 1; 

      while ((objectSort.get(previousIndex).compareTo((String) temp)) == 1 && (previousIndex > 0)) { 
       objectSort.set(previousIndex + 1, objectSort.get(previousIndex)); 
       previousIndex -= 1; //decrease index to compare current item with next previous item 
      } 
      if (objectSort.get(previousIndex).compareTo((String) temp) == 1) { 
       /* shift item in first element up into next element */ 
       objectSort.set(previousIndex + 1, objectSort.get(previousIndex)); 
       /* place current item at index 0 (first element */ 
       objectSort.set(previousIndex, (String) temp); 
      } else { 
       /* place current item at index ahead of previous item */ 
       objectSort.set(previousIndex + 1, (String) temp); 
      } 

     } 
    } 
} 

Mon programme simple à tester est:

import java.util.ArrayList; 

public class Main { 
    public static void main(String[] args){ 
     ArrayList<String> test = new ArrayList<String>(); 

     test.add("Roxy"); 
     test.add("Proxy"); 
     test.add("Moxy"); 
     test.add("Samuel Adams"); 

     Sorts.insertionSort(test); 

     System.out.println(test); 

    } 

} 

Pour résumer, j'ai des problèmes avec mon trieuse ArrayList. Le problème est qu'il ne triera pas correctement et je ne sais pas pourquoi. Merci d'avance. Si vous avez des questions, n'hésitez pas à les poser. :)

+0

Pouvez-vous indiquer la sortie attendue et la sortie réelle? – DGH

+3

Une raison pour laquelle vous n'utilisez pas 'Collections.sort (test);'? –

+0

Ceci est pour une tâche scolaire. Je choisis de faire un carnet d'adresses. L'un des prérequis est d'utiliser un trieur ou un chercheur, mais ils doivent être personnalisés, je ne peux pas utiliser les classes qui sont incluses dans Java. J'avais l'habitude d'utiliser le trieur d'insertion pour un tableau et cela a fonctionné parfaitement. Cependant, j'ai décidé d'utiliser un arraylist pour rendre les choses plus universelles et efficaces dans mon programme. – Spartan

Répondre

8

Premier problème: vous vous attendez à ce que compareTo renvoie toujours 1 pour "supérieur à". Il retourne juste une valeur supérieure à 0 qui peut être un entier positif différent. Donc, vos deux comparaisons == 1 devraient être > 0.

Il peut y avoir autres problèmes, mais c'est le premier que je regarderais.

+0

Hé, merci beaucoup Jon. Cela fonctionne parfaitement. Je clique sur Accepter sur votre réponse une fois que 5 minutes sont écoulées. Mais encore une fois, merci beaucoup. :) – Spartan

+0

Cela a été un épargnant de vie pour mon projet aussi! Je vous remercie! – user2788749