IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Problème Collections binarySearch


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Points : 43
    Points
    43
    Par défaut Problème Collections binarySearch
    Bonsoir, j'ai un problème avec ce code, il m'affiche une erreur
    je veux supprimer "C" par leur indice

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The method binarySearch(List<? extends Comparable<? super T>>, T) in the type Collections is not applicable for the arguments (List<String>, test)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    import java.util.*;
     
    public class test{
     
    	public test() {}
     
    	public test(String a) {}
     
    	void t() {
    		List<String> etd = new ArrayList<String>();
    		etd.add(new String("A"));
    		etd.add(new String("C"));
    		etd.add(new String("B"));
    		Collections.sort(etd);
    		for (String m : etd) 
    			System.out.println(m);
     
    		int indice = Collections.binarySearch(etd, new test("C"));
    		etd.remove(indice);
    		for (String m : etd) 
    			System.out.println(m);
    	}
     
    	public static void main(String[] args) {
    		new test().t();
    	}
     
    }

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Points : 43
    Points
    43
    Par défaut
    J'ai résoudre le problème, juste je changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int indice = Collections.binarySearch(etd, new String("C"));
    mais j'ai un autre problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package prb;
    import java.util.*;
    class Monstre{
     	private String nom;
    	private int vieM;
      	private int forceM;
     
    	@Override
    	String toString() {return "Nom de monster: "+ nom +" \tVie = " + vieM + "\tForce = " + forceM;}
    	Monstre() {}
    	Monstre(String nom) {
                    this.nom=nom;
    		vieM = 40 + (int) (Math.random() * 20);
    		forceM = 20 + (int) (Math.random() * 20);
    	}
    	int getVieM() {return vieM;}
    	int getForceM() {return forceM;}
    	String getNom() {return nom;}
    	void setNom(String nom) {this.nom = nom;}
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import java.util.*;
    class Main implements Comparable<Monstre>{
    	Monstre x = new Monstre();
           @Override
    	public int compareTo(Monstre o) {return x.getNom().compareTo(o.getNom());}
    	void t(){
    		List<Monstre> m = new ArrayList<Monstre>();
    		m.add(new Monstre("M1"));
    		m.add(new Monstre("M2"));
    		m.add(new Monstre("M3"));
    		m.add(new Monstre("M4"));
    		int indice = Collections.binarySearch(m, new Monstre("M1"));
    		m.remove(indice);
    		for (Monstre a : m) System.out.println(a);
    	}
    }

    erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The method binarySearch(List<? extends Comparable<? super T>>, T) in the type Collections is not applicable for the arguments (List<Monstre>, Monstre)

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    Citation Envoyé par Aymenkn Voir le message
    J'ai résoudre le problème, juste je changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int indice = Collections.binarySearch(etd, new String("C"));
    ... ou juste Collections.binarySearch(etd, "C") . new String(String) n'a jamais été très pertinent.

    Citation Envoyé par Aymenkn Voir le message
    mais j'ai un autre problème
    Est-ce que c'est la classe Monstre qui implémente Comparable<Monstre> ?
    Parce que la méthode dit bien qu'elle prend un List<? extends Comparable<? super Monstre>> donc il va bien falloir que List<Monstre> corresponde à ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Et n'oublie pas que binaySearch fait une recherche sur une liste triée! Je dis ça parce que, dans ton premier exemple, la liste de String n'est pas triée.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Points : 43
    Points
    43
    Par défaut
    est ce que obligatoire la liste doit être triée pour faire la recherche ? car dans ce exemple j'ai pas faire la trie de liste et binaySearch fonctionne correctement .

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Et n'oublie pas que binaySearch fait une recherche sur une liste triée! Je dis ça parce que, dans ton premier exemple, la liste de String n'est pas triée.
    On voit bien un appel correct à Collections.sort() avant de faire la recherche.

    Citation Envoyé par Aymenkn Voir le message
    est ce que obligatoire la liste doit être triée pour faire la recherche ? car dans ce exemple j'ai pas faire la trie de liste et binaySearch fonctionne correctement .
    C'est indispensable. Il peut arriver qu'on tombe sur le bon résultat quand la liste n'a pas été triée, mais ce n'est qu'un hasard. L'algorithme part du principe que la liste a été triée, si ce n'est pas le cas il n'essaie pas de corriger.

    De toute façon, d'après la méthode compareTo() de ta classe Monstre, les monstres sont classés par ordre de noms.
    Or, en les insérant dans l'ordre, "M1", "M2", "M3" et "M4", ils sont bel et bien classés dans l'ordre de leur nom.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Points : 43
    Points
    43
    Par défaut
    dans ce cas les nom sont insérer dans l'ordre de leur nom.
    mais j'ai un autre cas que il faut faire le trie:

    j'ai une classe arme (attribut: force et nom), et dans le classe main je fait une liste les arme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Arme> arme = new ArrayList<Arme>();
    et lorsque je fait le trie il m'affiche erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(arme);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable for the arguments (List<Arme>). The inferred type Arme is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Toutes les liste triées nécessitent les les objets implémentent Comparable ou que tu fournisse un Comparator. Si tu ne veux pas trier tes listes, alors je me demande pourquoi tu essaie d'utiliser binarySearch, utilise simplement la méthode contains(). Le principe de binarySerach, c'est de faire une recherche dichotomique plus performante que de parcourir toute la liste.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Collection de String
    Par Contrec dans le forum Général VBA
    Réponses: 2
    Dernier message: 26/01/2009, 17h33
  2. problème collection combobox
    Par sly60 dans le forum C#
    Réponses: 3
    Dernier message: 10/04/2008, 15h57
  3. NetBeans Eclipse Collections.binarySearch
    Par henriDes dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2006, 16h02
  4. Probléme collection d'objets
    Par Contrec dans le forum MFC
    Réponses: 1
    Dernier message: 14/04/2005, 10h08
  5. problème collection TABLE
    Par venusiafalls dans le forum SQL
    Réponses: 6
    Dernier message: 28/04/2004, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo