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

Langage Java Discussion :

Incoherence bluffante :/


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Par défaut Incoherence bluffante :/
    Bonjour a tous

    Je suis face a une incoherence assez bluffante et j aimerai vous demander votre avis.

    Voici le code :
    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
     
    public static boolean mapEgal(Map<MultiKey,Float> m1,Map<MultiKey,Float>  m2){
    		boolean f = true;
    		List<MultiKey> l1 = new ArrayList<MultiKey>(m1.keySet());
    		List<MultiKey> l2 = new ArrayList<MultiKey>(m2.keySet());
    		if (!l1.equals(l2)){
    			f = false;
    			System.out.println(f);
    			return f;
     
    		}else{
    			int i=0;
    			while ((Egal(m1.get(l1.get(i)), m2.get(l1.get(i)))&&i<l1.size())){
    				i++;
     
    			}
    			if (i==l1.size()){
    				if (!Egal(m1.get(l1.get(i)), m2.get(l1.get(i)))){
    					f = false;
    				}
     
    			}else{
    				f = false;
    			}
     
    		}
    		return f;
     
    	}
    C est assez simple, je teste l egalite de deux Map.
    Dabord des cle (Multikeys en l occurence), si les cle sont identiques alors je teste les valeurs une par une (grace a une methode Egal qui marche tres bien) et je sort des qu une valeur est differente.Rien d extraordinaire.
    La methode fonctionne apparemant bien, mais...je me suis rendu compte en phase de debug, que lorsque je suis dans ma boucle while, une fois sortis de celle ci, plus rien. Impossible de printer quelque chose, que ce soit le return ou un autre print n importe ou dans le reste de la methode, une fois le while termine, c est comme si je sortais completement de la methode.

    Une idee ?!?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut
    1. Les sets renvoyés par les méthodes keySet ne sont pas ordonnés. Les arrayLists, si. Par conséquent, on peut avoir m1.keySet().equals(m2.keySet()) vrai mais l1.equals(l2) faux.

    2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (i==l1.size()){
        if (!Egal(m1.get(l1.get(i)), m2.get(l1.get(i)))){
    Si i == l1.size(), alors l1.get(i) plantera. L'index varie de 0 à l1.size() - 1.

    Avez vous une exception dans la console?

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Par défaut
    non non aucune erreur.C est bien ca qui me perturbe, tout marche tres bien

  4. #4
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    Est-il possible d'avoir un exemple complet (avec un main) et éventuellement simplifié d'un cas où cela se produit ?

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Vous êtes sur de rentrer dans le while ?

    Parce que potentiellement, vous sortez de la méthode _avant_ :

    if (!l1.equals(l2)){
    f = false;
    System.out.println(f);
    return f;

    }

  6. #6
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 095
    Par défaut
    Est-ce que votre méthode Egal gère des exceptions ? Et si oui, lesquelles et comment.
    Parce que dans votre while, imaginons que ce dernier parte en live, vous avez une boucle infinie qui va faire croître i jusqu'à un overFlow... Bref, il y a je penses forcément une exception quelque part...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Par défaut
    Citation Envoyé par BugFactory Voir le message
    1. Les sets renvoyés par les méthodes keySet ne sont pas ordonnés. Les arrayLists, si. Par conséquent, on peut avoir m1.keySet().equals(m2.keySet()) vrai mais l1.equals(l2) faux.

    2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (i==l1.size()){
        if (!Egal(m1.get(l1.get(i)), m2.get(l1.get(i)))){
    Si i == l1.size(), alors l1.get(i) plantera. L'index varie de 0 à l1.size() - 1.

    Avez vous une exception dans la console?
    Même remarque, mais deux lignes plus haut (et en mode debug, j'imagine que s'il devait y avoir une exception dans la console, ça serait encore plus loin après le while)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Egal(m1.get(l1.get(i)), m2.get(l1.get(i)))&&i<l1.size()
    Après le test du dernier élément, lorsque i == l1.size(), i<l1.size() est testé après Egal(m1.get(l1.get(i)), m2.get(l1.get(i))).
    Un IndexOutOfBoundsException est plus que probable.

Discussions similaires

  1. [bluffant] il devine tout
    Par zodd dans le forum La taverne du Club : Humour et divers
    Réponses: 104
    Dernier message: 16/03/2009, 11h11
  2. Réponses: 0
    Dernier message: 13/08/2008, 17h34
  3. Where not like incoherent
    Par javaboy dans le forum Access
    Réponses: 2
    Dernier message: 08/03/2007, 16h25
  4. Réponses: 3
    Dernier message: 14/04/2006, 21h43
  5. Réponses: 4
    Dernier message: 20/06/2005, 15h04

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