Je suis capable de comparer les cordes bien, mais je voudrais savoir comment je peux classer les numéros de points flottants?
getchange () renvoie une chaîne. Je veux pouvoir trier descendant. Comment puis-je faire cela? P>
Mise à jour: strong> p> Je reçois l'erreur de la compilation: p> < Pré> xxx pré> p>
4 Réponses :
Lire le Javadoc de comparateur # Comparer () code>
méthode.
compare ses deux arguments pour la commande.
retourne un entier négatif, zéro ou un entier positif, car premier argument est inférieur ou supérieur à la seconde. strong> p> blockQuote> donc, essentiellement em>: p>
xxx pré> ou si vous aimez les opérateurs conditionnels: P>
return o1.getChange() < o2.getChange() ? -1 : o1.getChange() > o2.getChange() ? 1 : 0;
Faites attention à Float.Nan! Je suppose que vos données ne sont pas nanes, mais comme Nan d'un côté de toute comparaison retournera toujours false (même float.nan == float.nan est faux!), Vous voudrez peut-être un flotteur.Innan (Change1) ou quel que soit votre chèque. Sinon, le tri sera apparemment aléatoire s'il y a une NAN impliquée.
Je reçois l'erreur de l'heure de la compilation (voir le code mis à jour dans ma question): Cette méthode doit renvoyer le résultat de type int ChangeComparator.java
L'erreur de compilation parle pour elle-même. Vous devez vous assurer que TOUJOURS B> retourne un int code>. Je vais éditer l'exemple.
Que diriez-vous:
Comparator<Quote> changeComparator = Comparator.comparingDouble(Quote::getChange);
C'est la meilleure réponse - Déléguer la comparaison avec le comparète de flotteur.
Vous pouvez utiliser float.cacher (flotteur F1, flotteur F2) code>
:
public static int compare(float f1, float f2)
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { Scanner input = new Scanner(System.in); int tc = input.nextInt(); int alpha = 0; while (tc-- > 0) { int ttc = input.nextInt(); int sort = input.nextInt(); input.nextLine(); Vector<student> v = new Vector<>(); alpha++; while (ttc-- > 0) { String name = input.next(); int weit = input.nextInt(); int age = input.nextInt(); float hight = input.nextFloat(); v.add(new student(name, weit, age, hight)); } Collections.sort(v); int count = 0; System.out.println("CENARIO {" + alpha + "}"); for (student s : v) { System.out.print((count + 1) + " - "); System.out.println(s.name); count++; if (count == sort) { break; } } } } private static class student implements Comparable<student> { String name; int weit; int age; float hight; public student(String name, int weit, int age, float hight) { this.name = name; this.weit = weit; this.age = age; this.hight = hight; } @Override public int compareTo(student t) { if (this.weit - t.weit != 0) { return t.weit - this.weit; } if (this.age - t.age != 0) { return this.age - t.age; } if (this.hight - t.hight != 0) { return Float.compare(this.hight, t.hight); } return this.name.compareTo(t.name); } } }
Outre le numéro NAN, vous n'avez aucune déclaration de retour garanti dans votre code. De manière réaliste, vous le faites, mais le compilateur ne peut pas dire cela parce que vous avez trois déclarations différentes. Cela ne peut pas évaluer ceux-ci avant l'exécution, de sorte que cela pense que vous pourriez réellement passer la dernière déclaration si et il n'y a pas de clause de retour.