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

avec Java Discussion :

Question sur les TreeSet


Sujet :

avec Java

  1. #1
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut Question sur les TreeSet
    Bonjour à toutes et à tous,

    je voulais savoir une explication sur ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     TreeSet<Integer> s = new TreeSet<Integer>();
            TreeSet<Integer> subs = new TreeSet<Integer>();
     
            for(int i=606;i<613;i++)
                if(i%2==0) s.add(i);
     
            subs = (TreeSet)s.subSet(608, true,611,true);
            subs.add(629);
            System.out.println(s+" "+subs);
    L'exécution de code donne cette exception:
    Exception in thread "main" java.lang.IllegalArgumentException: key out of range
    at java.util.TreeMap$NavigableSubMap.put(TreeMap.java:1386)
    at java.util.TreeSet.add(TreeSet.java:238)
    at revcertif.Main.main(Main.java:28)
    Java Result: 1
    La question est pourquoi je ne peut pas ajouter la valeur 629 dans mon TreeSet alors que je peut ajouter par, exemple 611 !

    Merci pour la réponse dés l'avance!

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Dans la doc de la méthode subSet() :
    The returned set will throw an IllegalArgumentException on an attempt to insert an element outside its range.

    Au passage ton cast en TreeSet est incorrect. Tu devrais utiliser le type NavigableSet !

    a++

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            for(int i=606;i<613;i++)
    La réponse ne viendrait pas d'ici ?

  4. #4
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    @adiGuba: Merci pour l'éclaircissement et à propos le cast, pourquoi est-il incorrect puisque le code fonctionne correctement?

    @danimo: C'est quoi le problème ici? Il s'agit d'une boucle pour insérer des valeurs pairs dans s

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par L'aigle de Carthage Voir le message
    @adiGuba: Merci pour l'éclaircissement et à propos le cast, pourquoi est-il incorrect puisque le code fonctionne correctement?
    Ca dépendra de l'implementation du Set.

    Tu as eu de la chance car la méthode subSet() de TreeSet renvoi un objet héritant de TreeSet... mais ce n'est pas garanti par les spec !

    Cela pourrait être n'importe quelle classe implémentant NavigableSet...

    a++

  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
    Autrement dit, le cast marche peut-être aujourd'hui avec la JRE employée sur l'ordinateur employé. Mais c'est un coup de chance, un simple hasard improbable.
    Rien ne dit qu'il marchera demain, avec une prochaine JRE, une autre version, future ou antérieure. Personne a jamais dit que c'est censé pouvoir se faire.

    Par ailleurs, lorsqu'il n'y a pas de raison de faire de cast, il est toujours mieux de ne pas le faire : code plus court, plus clair, plus maintenable, et une faiblesse en moins.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    Tout simplement parce que l’élément 29 que tu souhaites ajouté dans subs il dépasse l'intervalle [ 608 - 611]de subSet(608, true,611,true);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      subs = (TreeSet)s.subSet(608, true,611,true);
            subs.add(629);

Discussions similaires

  1. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49
  2. question sur les vertex buffer et index buffer
    Par airseb dans le forum DirectX
    Réponses: 9
    Dernier message: 25/08/2003, 02h38
  3. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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