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 :

compteur anormal incompréhensible


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut compteur anormal incompréhensible
    Bonjour !

    Voici un programme :

    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
    30
    31
    32
     
    public class TesterPoints2
        {
    		public static void main(String [] args)
           {
               Cercle A = new Cercle(1, 2, 3);
               Cercle B = new Cercle(21, 22, 23);
               Cercle C = new Cercle(31, 32, 33);
           }  
     
        }
     
     
     
       class Cercle
       {
           private double centreX;
           private double centreY;
           private double rayon;
           private static int nombreObjets; 
           public Cercle(double x, double y, double r)
           {
     
              centreX = x; centreY = y; rayon = r;
              System.out.println("nombre total d' objets = " + nombreObjets++);
           }
     
           public void afficherCoord()
           {
               System.out.println("coordonnées du cercle : " + centreX + ", " + centreY + " et " + rayon);
           }
       }
    Après compil puis exéc, j' obtien ceci :

    nombre total d' objets = 0
    nombre total d' objets = 1
    nombre total d' objets = 2

    Ce qui me paraît anormal. En écrivant ceci : Cercle A = new Cercle(1, 2, 3),
    Le champs static nombreObjets est initialisé à zéro.
    Donc, l' instruction : System.out.println("nombre total d' objets " + nombreObjets++); permet d' afficher : nombre total d' objets = 1.
    Pourquoi c' est 0 au lieu de 1 ?

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    C'est pourtant tout à fait normal puisque tu utilises l'opérateur de post-incrémentation ++. Ainsi le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("nombre total d' objets = " + nombreObjets++);
    Est strictement équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println("nombre total d' objets = " + nombreObjets);
    nombreObjets += 1;

    Utilises la pré-incrémentation ou découpe bien tes opérations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("nombre total d' objets = " + ++nombreObjets);
    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,

    C'est pourtant tout à fait normal puisque tu utilises l'opérateur de post-incrémentation ++. Ainsi le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("nombre total d' objets = " + nombreObjets++);
    Est strictement équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println("nombre total d' objets = " + nombreObjets);
    nombreObjets += 1;

    Utilises la pré-incrémentation ou découpe bien tes opérations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("nombre total d' objets = " + ++nombreObjets);
    a++
    Je ne pige pas. Depuis quand nombreObjet++ = nombreObjets ?

    Pourquoi préincrémenter. ça n' a pas de sens. Les compteurs sont toujours post-incrémentés.

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Lorsque tu post-incrémentes, l'incrémentation est effectué après l'evaluation de l'expression courante, donc a++ est évalué comme a puis incrémenté.

    Lorsque tu fais de la pré-incrémentation, la valeur est incrémenté avant d'être évalué...



    Citation Envoyé par Nayila Voir le message
    Je ne pige pas. Depuis quand nombreObjet++ = nombreObjets ?
    Depuis toujours, et ce quel que soit le langage qui utilise cette syntaxe...

    Citation Envoyé par Nayila Voir le message
    Pourquoi préincrémenter. ça n' a pas de sens.
    Ben si tu veux la valeur après l'avoir incrémenter tu est obligé d'utiliser de la préincrémentation ou de découper tes instructions (ce que je trouve bien plus propre au passage).


    Citation Envoyé par Nayila Voir le message
    Les compteurs sont toujours post-incrémentés.
    Et pourquoi ???

    Je te conseille plutôt d'éviter les incrémentations en plein milieux d'une instruction comme cela...

    a++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Lorsque tu post-incrémentes, l'incrémentation est effectué après l'evaluation de l'expression courante, donc a++ est évalué comme a puis incrémenté.

    Lorsque tu fais de la pré-incrémentation, la valeur est incrémenté avant d'être évalué...




    Depuis toujours, et ce quel que soit le langage qui utilise cette syntaxe...


    Ben si tu veux la valeur après l'avoir incrémenter tu est obligé d'utiliser de la préincrémentation ou de découper tes instructions (ce que je trouve bien plus propre au passage).



    Et pourquoi ???

    Je te conseille plutôt d'éviter les incrémentations en plein milieux d'une instruction comme cela...

    a++
    ça y est. J' ai pigé . Il fallait que j' incrémente avant l' instruction d' affichage.
    Première instruction du constructeur : nombreObjets++;

  6. #6
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Cf mon post plus haut

    ps : n'oublie pas le tag

  7. #7
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Bonjour, le souci doit venir de la post incrémentation dans l'écriture dans la sortie standard.

    En effet, si tu fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public Cercle(double x, double y, double r)
           {
     
              centreX = x; centreY = y; rayon = r;
              nombreObjets++;
              System.out.println("nombre total d' objets = " + nombreObjets);
           }
    Il te renvoie alors 1 puis 2 puis 3.

    L'autre possibilité consistait à faire une pré incrémentation dans la sortie standard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("nombre total d' objets = " + ++nombreObjets);
    edit : grilled by adiguba

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

Discussions similaires

  1. [WSAD5] probleme incompréhensible
    Par capitaine_banane dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 07/04/2004, 11h56
  2. Remise à 0 d'un compteur automatique
    Par missllyss dans le forum SQL
    Réponses: 4
    Dernier message: 15/12/2003, 16h46
  3. [JSP] Erreur incompréhensible
    Par xxaragornxx dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/09/2003, 16h37
  4. [PostgreSQL] Fonct. anormal de postmaster sous Cygwin
    Par moipastoi dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 14/03/2003, 13h13
  5. Migration Access > SQL Server (suite) : Compteur
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/03/2003, 14h08

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