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?
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 ... –
Vous triez des chaînes (c'est-à-dire par ordre alphabétique), pas des chiffres ... – assylias
C'est tout à fait correct. "1327" <"15" – Li357