ArrayList : tri avec Interface Comparator ne compile pas ?
Fermé
sergio1236
Messages postés
9
Date d'inscription
vendredi 22 mars 2013
Statut
Membre
Dernière intervention
13 juin 2013
-
22 mars 2013 à 18:28
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 22 mars 2013 à 22:35
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 22 mars 2013 à 22:35
5 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
22 mars 2013 à 18:56
22 mars 2013 à 18:56
"Le code est bon, mais j'ai un problème (...) à la compilation"
Donc le code n'est pas bon ^^
Quel est le message d'erreur de la compilation ?
Remarque : copier la collection dans un tableau et trier le tableau est plus couteux que trier directement la collection :
Donc le code n'est pas bon ^^
Quel est le message d'erreur de la compilation ?
Remarque : copier la collection dans un tableau et trier le tableau est plus couteux que trier directement la collection :
Collections.sort(liste1, new Comparator<ListeElectorale>() { @Override public int compare(ListeElectorale e1, ListeElectorale e2) { return Integer.compare(e2.getVoix(), e1.getVoix()); } });
sergio1236
Messages postés
9
Date d'inscription
vendredi 22 mars 2013
Statut
Membre
Dernière intervention
13 juin 2013
22 mars 2013 à 19:17
22 mars 2013 à 19:17
en effet, le code Arrays.sort (tab, new CompareListesElectorales() ); , n'est pas bon.
En fait, l'énoncé demande de transférer l'ArrayList dans un tableau de liste : " parce qu'on ne connaît pas à priori le nombre de listes, celles-ci seront tout d'abord mémorisées dans un objet de type[ArrayList]. Puis, lorsque toutes les listes auront été saisies, elles seront transférées dans un tableau de listes. "
-les résultats seront affichés par ordre décroissant du nombre de sièges obtenus. "
Dans Eclipse : j'ai plusieurs messages sur la ligne de l'erreur :
Multiple markers at this line :
Syntax error on token ",", = expected
Syntax error on token "(" , delete this token )
Syntax error on token ")" , delete this token )
Dans Eclipse, à la compilation , quand je clique sur " Run as Java application " ,
dans la Console , j'obtiens le message suivant :
j'ai un message d'erreur :
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
atistia.st.elections.MainElections$CompareListesElectorales.main(MainElections.java:75)
ligne 75 public static void main(String[] args) {.....
En fait, l'énoncé demande de transférer l'ArrayList dans un tableau de liste : " parce qu'on ne connaît pas à priori le nombre de listes, celles-ci seront tout d'abord mémorisées dans un objet de type[ArrayList]. Puis, lorsque toutes les listes auront été saisies, elles seront transférées dans un tableau de listes. "
-les résultats seront affichés par ordre décroissant du nombre de sièges obtenus. "
Dans Eclipse : j'ai plusieurs messages sur la ligne de l'erreur :
Multiple markers at this line :
Syntax error on token ",", = expected
Syntax error on token "(" , delete this token )
Syntax error on token ")" , delete this token )
Dans Eclipse, à la compilation , quand je clique sur " Run as Java application " ,
dans la Console , j'obtiens le message suivant :
j'ai un message d'erreur :
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
atistia.st.elections.MainElections$CompareListesElectorales.main(MainElections.java:75)
ligne 75 public static void main(String[] args) {.....
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
22 mars 2013 à 19:30
22 mars 2013 à 19:30
Tu ne peux pas faire "Run as" si tu as encore des erreurs, Java te renverra (comme ici) une erreur sur le main parce que le programme n'est pas compilé. Mais ce n'est pas cette erreur d'exécution qu'il faut regarder mais les erreurs de compilation !
Tes 3 erreurs de "Syntax error on token" à quel code ça correspond ?
Tes 3 erreurs de "Syntax error on token" à quel code ça correspond ?
sergio1236
Messages postés
9
Date d'inscription
vendredi 22 mars 2013
Statut
Membre
Dernière intervention
13 juin 2013
22 mars 2013 à 20:03
22 mars 2013 à 20:03
Toutes les 3 erreurs de Syntax correspondent à la ligne 154 :
Arrays.sort(tab,new CompareListesElectorales());
et on les retrouve dans l'onglet " Problems" view ( erreurs de compilation):
j'ai de nouveau les mêmes problèmes signalés :
Description Resource Path Location Type
line 154 : Arrays.sort(tab,new CompareListesElectorales());
1° ) Syntax error on token ",", = expected MainElections.java /prElectionsGroupe02/src/istia/st/elections line 154 Java Problem
2°) Description Resource Path Location Type
Syntax error on token ")", delete this token MainElections.java /prElectionsGroupe02/src/istia/st/elections line 154 Java Problem
3°) Description Resource Path Location Type
Syntax error on token ")", delete this token MainElections.java /prElectionsGroupe02/src/istia/st/elections line 154 Java Problem
Warnings :
Description Resource Path Location Type
Build path specifies execution environment JavaSE-1.6. There are no JREs installed in the workspace that are strictly compatible with this environment. prElectionsGroupe02 Build path JRE System Library Problem
Arrays.sort(tab,new CompareListesElectorales());
et on les retrouve dans l'onglet " Problems" view ( erreurs de compilation):
j'ai de nouveau les mêmes problèmes signalés :
Description Resource Path Location Type
line 154 : Arrays.sort(tab,new CompareListesElectorales());
1° ) Syntax error on token ",", = expected MainElections.java /prElectionsGroupe02/src/istia/st/elections line 154 Java Problem
2°) Description Resource Path Location Type
Syntax error on token ")", delete this token MainElections.java /prElectionsGroupe02/src/istia/st/elections line 154 Java Problem
3°) Description Resource Path Location Type
Syntax error on token ")", delete this token MainElections.java /prElectionsGroupe02/src/istia/st/elections line 154 Java Problem
Warnings :
Description Resource Path Location Type
Build path specifies execution environment JavaSE-1.6. There are no JREs installed in the workspace that are strictly compatible with this environment. prElectionsGroupe02 Build path JRE System Library Problem
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
22 mars 2013 à 22:35
22 mars 2013 à 22:35
Je viens de tester ton code, et l'erreur est simple, c'est que tu mets ta ligne de code en dehors de la méthode main, elle se retrouve donc dans un bloc d'instructions qui n'autorise pas à avoir des appels de méthodes comme ça...
C'est le genre de choses que tu aurais pu voir facilement en faisant des indentations dans ton code !
Remarque : ta classe CompareListesElectorales est beaucoup trop compliqué pour pas grand chose, de plus il n'y a pas de raison de la mettre comme ça en classe interne de MainElections, il serait plus logique de faire une classe à part, voire d'implémenter Comparable dans ta classe ListeElectorale ce qui évite l'utilisation d'un Comparator pour faire le sort...
C'est le genre de choses que tu aurais pu voir facilement en faisant des indentations dans ton code !
Remarque : ta classe CompareListesElectorales est beaucoup trop compliqué pour pas grand chose, de plus il n'y a pas de raison de la mettre comme ça en classe interne de MainElections, il serait plus logique de faire une classe à part, voire d'implémenter Comparable dans ta classe ListeElectorale ce qui évite l'utilisation d'un Comparator pour faire le sort...
package istia.st.elections; import istia.st.elections.ListeElectorale; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.ListIterator; import java.util.Scanner; // classe de comparaison de listes électorales class CompareListesElectorales implements Comparator<ListeElectorale> { public int compare(ListeElectorale liste1, ListeElectorale liste2) { return Integer.compare(liste2.getVoix(), liste1.getVoix()); } } public class MainElections { final static int TOTAL=100000; final static double MIN = TOTAL*0.05; final static int MAXSIEGE = 6 ; ArrayList<ListeElectorale> liste=new ArrayList<ListeElectorale>(); static Scanner ls; static Scanner vo; static int voix; static String nl; public static void main(String[] args) { ArrayList<ListeElectorale> liste1 = new ArrayList<ListeElectorale>(); ArrayList<ListeElectorale> liste2 = new ArrayList<ListeElectorale>(); int nbSieges=0; double rest=0; int i=0; int j=0; System.out.println("Entrez les nombres des sieges"); Scanner sc = new Scanner(System.in); int sieges = sc.nextInt(); // création des listes électorales System.out.println("Entrez le nom de la liste"); String nl = sc.next(); System.out.println(nl); while(!nl.equals("*")) { for (ListeElectorale str: liste1) { double som=0; double moy=0; ListIterator<ListeElectorale> itr = liste1.listIterator(); if (itr.next().getVoix()>MainElections.MIN) { liste1.add(str); som +=str.getVoix(); System.out.println(str); } moy=som/liste1.size(); rest = (itr.next().getVoix()%moy); sieges=(int) (itr.next().getVoix()/moy); for(i=0;i<liste1.size();i++) { if(sieges>0) { nbSieges=sieges; } } for(i=0;i<nbSieges;i++) { System.out.println("Liste " + itr.next().getNom() + " " + nbSieges+ " : sièges"); } } int ind=0; ListeElectorale tmp; for(i=0;i<2;i++) { ListIterator<ListeElectorale> itr = liste2.listIterator(); int max=0; for(ListeElectorale str2 : liste2) { if(max<rest) { max=(int) rest; ind=j; liste2.add(str2); } } nbSieges=nbSieges+1; rest=0; tmp = (ListeElectorale) liste2.get(j); tmp.toString(); } // conversion de l'ArrayList en tableau ListeElectorale [] tab = liste1.toArray(new ListeElectorale[liste1.size()]); Arrays.sort(tab, new CompareListesElectorales()); } } }