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 :

Problème d'affectation simple


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut Problème d'affectation simple
    Bonjour,
    Je débute en Java et je voudrais bien comprendre les bases, j'utilise Eclipse pour écrire des petites procédures à l'aide d'un tuto créé sur ce site :
    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
    class Test4 {
    	  public static void main (String args[]) {
    	    int n1=0;
    	    int n2=0,x=0,y=0;
    	    
    	    System.out.println("1= " + x++); // est équivalent à
            y=++x;
    	    System.out.println("2= " + x + " y=" + y);/* x = x + 1;*/
    
    	    System.out.println("3= " + ++x); // est équivalent à
    
    	   /* x = x + 1;*/System.out.println("4=" + x);
    	    System.out.println("n1 = " + n1 + " n2 = " + n2);
    	ici    n1=n2++;
    	    /*n1=n2;*/    
    	    System.out.println("n1 = " + n1 + " n2 = " + n2);
    	    n1=++n2;        
    	    System.out.println("n1 = " + n1 + " n2 = " + n2);
    	    n1=n1++;        //attention
    
    	ici2    System.out.println("n1 = " + n1 + " n2 = " + n2);
    	  }
    	}
    Ma question est simple pourquoi ici n1 ne prends pas la valeur de n2 soit 1 ? pourtant on est bien en affectation et pourquoi sur ici2 n1 ne s'incrémente pas soit avoir la valeur 3 ?
    Extrait du cours "Les opérateurs d'incrémentation et de décrémentation sont : n++ ++n n-- --n

    Si l'opérateur est placé avant la variable (préfixé), la modification de la valeur est immédiate sinon la modification n'a lieu qu'à l'issue de l'exécution de la ligne d'instruction (postfixé)

    L'opérateur ++ renvoie la valeur avant incrémentation s'il est postfixé, après incrémentation s'il est préfixé.
    "

    Dans les 2 cas je suis en postfixé la modif n'a lieu qu'à l'issue de l'éxécution de la ligne
    si quelqu'un peut m'aiguiller merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ah, hélas, l'explication n'est pas tout à fait juste.

    En postfixé, l'incrémentation ne se fait pas après exécution de la ligne.

    Elle se fait, après avoir fourni la valeur que la variable avait jusque-là.

    Quand tu fais

    c'est équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int temporaire = n2++;
    n1 = temporaire;
    Et cette première ligne est équivalente à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int temporaire0 = n2;
    n2 = n2 + 1;
    int temporaire = temporaire0;
    D'abord, n2 fournit la valeur qu'elle contient. Il en sera fait quelque chose ensuite.
    Puis n2 est incrémentée.
    Enfin, la valeur qu'on avait récupérée au début, on l'assigne à n1.

    Raisonnement similaire avec

    qui est équivalent à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int temporaire = n1++;
    n1 = temporaire;
    qui est lui-même équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int temporaire0 = n1;
    n1 = n1 + 1;
    int temporaire = temporaire0;
    n1 = temporaire;
    D'abord, n1 fournit la valeur qu'elle contient. Il en sera fait quelque chose ensuite.
    Puis n1 est incrémentée.
    Enfin, la valeur qu'on avait récupérée au début, on l'assigne à n1.

    Du coup, il était bien inutile d'incrémenter n1, puisque juste après on lui assigne une autre valeur. L'effet de l'incrémentation est tout bonnement perdu.

    On peut donc en conclure qu'une instruction comme :

    est complètement dénuée d'intérêt et qu'il ne faut pas le faire.
    Le langage ne l'interdit pas, certes. Il n'interdit pas non plus de définir une méthode qui ne fait rien. On a autre chose à faire que d'essayer de repérer tous les bouts de code qu'il n'est pas malin de taper, pour les interdire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Merci pour ta réponse en effet dans le 1er cas il s'agit d'une affectation simple d'une variable qui est incrémentée à une autre en utilisant une variable tampon,(m'a permis de me mémoriser mes 1er cours de programmation) pour aller au bout du raisonnement j'ai codé comme ça avec une seule variable temp et ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        temp=n2;
        n2= n2+1;
        temp=n2;
    Pour le 2ème cas simple incrémentation pour résumer ce que tu dis :
    fonctionne
    ne fonctionne pas et
    fonctionne
    MErci à toi

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/04/2006, 09h39
  2. Réponses: 4
    Dernier message: 19/02/2006, 18h18
  3. Problème d'affectation de variable
    Par bob33 dans le forum C
    Réponses: 3
    Dernier message: 04/11/2005, 17h01
  4. problème d'affectation de tableau ...
    Par Mike888 dans le forum C
    Réponses: 23
    Dernier message: 26/02/2005, 14h52
  5. Entier 64 bits sous linux, problème d'affectation
    Par Steki-kun dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2005, 21h10

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