2016-11-07 1 views
-2

Voici un peu de mon code c'est une boucle for pour créer une liste ordonnée de chaînes a mais pour une raison quelconque donne une fausse réponse sur un des nombres.Pourquoi mon compareTo() donne-t-il de fausses réponses?

public static void main(String[] args) { 
    List<String> answer = new ArrayList(); 
    List<String> n = new ArrayList<>(); 
    int w = 1327; 
    int x = 17; 
    int y = 15; 
    int z = 12; 
    n.add(Integer.toString(x)); 
    n.add(Integer.toString(y)); 
    n.add(Integer.toString(z)); 
    n.add(Integer.toString(w)); 



    while (n.size() > 0) { 

     String smallest = null; 
     for (String f : n) { 
      if (smallest == null || smallest.compareTo(f)>0) { 
       smallest = f; 

      } 
     } 
     answer.add(smallest); 
     n.remove(smallest); 

la sortie attendue est:

12 
15 
17 
1327 
1327 
17 
15 
12 

La sortie de code est à la place:

12 
1327 
15 
17 
17 
15 
1327 
12 

La raison pour laquelle il imprime inverse comme il est bien en raison d'une autre partie du code et est censé Être comme ça. Je l'ai débogué déjà et le compareTO (f)> 0 pour une raison quelconque donnant le mauvais int pour 1327. Est-ce que quelqu'un sait ce que je fais mal?

+8

Vous n'êtes pas comparer des nombres entiers. Vous comparez * les chaînes *. "1327" est une chaîne antérieure à "15". Essayez de créer une 'Liste ' à la place ... –

+0

Vous triez des chaînes (c'est-à-dire par ordre alphabétique), pas des chiffres ... – assylias

+0

C'est tout à fait correct. "1327" <"15" – Li357

Répondre

2

effectivement, le programme fonctionne correctement !! Vous utilisez String.compareTo pour comparer les nombres entiers ... ainsi, 15 < 12345 mais '12345' < '15' Vous devez ajuster votre code pour utiliser les entiers si vous voulez les trier.

PS: pour éviter d'écrire votre algorithme, vous pouvez utiliser Collections.sort();

0
List<Integer> answer = new ArrayList(); 
    List<Integer> n = new ArrayList<>(); 
    int w = 1327; 
    int x = 17; 
    int y = 15; 
    int z = 12; 
    n.add(x); 
    n.add(y); 
    n.add(z); 
    n.add(w); 

    while (n.size() > 0) { 

     Integer smallest = null; 
     for (Integer f : n) { 
      if (smallest == null || smallest>f) { 
       smallest = f; 

      } 
     } 
     answer.add(smallest); 
     n.remove(smallest);