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 :

Dependence cyclique A+B+C est different de C+B+A


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 29
    Par défaut Dependence cyclique A+B+C est different de C+B+A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public interface InterfaceA
    {
        public static final int A = 2 * InterfaceB.B;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public interface InterfaceB
    {
        public static final int B = InterfaceC.C + 1;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public interface InterfaceC 
    {
        public static final int C = InterfaceA.A + 1;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Main implements InterfaceA, InterfaceB, InterfaceC
    {
        public static void main (String [] args)
        {
            System.out.println (A + B + C);
        } 
     
    }
    Ca affiche 7 chez moi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Main implements InterfaceA, InterfaceB, InterfaceC
    {
        public static void main (String [] args)
        {
            System.out.println (C + B + A);     } 
     
    }
    Ca affiche 6 chez moi.

    Quelqu'un peut m'expliquer ce comportement?
    J'ai deja trouve qq explications peu convaincantes alors j'en voudrais d'autres.

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Lol, tu t'amuses bien avec ce genre de test...

    Le résultat ne m'étonne pas, mais je ne saurais pas l'expliquer précisément

    Bon courage pour trouver

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Bonjour,

    Ce comportement me semble normal.

    Chronologiquement :
    >> System.out.println(A + B + C)
    Le système cherche donc à évaluer A.
    >> public static final int A = 2 * InterfaceB.B;
    Ceci peut se comprendre en 2 lignes
    >> int A;
    >> A = 2 * InterfaceB.B;
    La première ligne crée la variable A, et l'initialise par défaut à 0, puisque c'est un int : A=0
    La seconde ligne nécessite l'évaluation de B :
    >> public static final int B = InterfaceC.C + 1;
    Ceci nécessite l'évaluation de C :
    >> public static final int C = InterfaceA.A + 1;
    Comme A=0, on en déduit C=1
    D'où B=2
    Et finalement A=4
    D'où la somme de 7.

    Sauf erreur.

    Nicolas

  4. #4
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    +1 avec Nicolas_75

    C'est exactement ça, d'ailleurs pour confirmer il suffit de faire C+ B + A
    Voici l'ordre ou sont traité les opérations:

    C = A + 1 //on va calculer A et pour l'instant toutes les variables sont à 0
    A = 2 * B //on va calculer B
    B = C + 1 // B = 0 + 1, et remonte pour calculer A puis C

    Donc au final on a
    B = 0 + 1 = 1
    A = 2 * B = 2*1 = 2
    C = A + 1 = 2 +1 = 3

    D'ou C + B + A = 3 + 1 +2 = 6, donc le résultat est logique !!!!!

  5. #5
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    Tout à fait.
    Java n'est pas un "resolveur" d'équation. il traite les operations séquentiellement.

Discussions similaires

  1. shared_ptr et dependance cyclique
    Par Trii42 dans le forum C++
    Réponses: 5
    Dernier message: 30/11/2014, 05h22
  2. Réponses: 0
    Dernier message: 04/12/2012, 02h12
  3. Réponses: 2
    Dernier message: 29/10/2005, 13h51
  4. dependances cycliques
    Par Raumfahrerralf dans le forum C++
    Réponses: 14
    Dernier message: 12/03/2005, 20h10
  5. Les différences entre association et dépendance ?
    Par sephile dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 12/01/2005, 14h43

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