Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme incrémentation

    20 janvier 2015 à 20:54:37

    bonjour voici le programme :
    public class Exercice3 {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int i , j , n ;
    		i=0 ; n=i++ ;
    		System.out.println("A: i= "+i+" n="+n);
    		i=10 ; n=++i ;
    		System.out.println("B:i "+i+" n="+n);
    		i=20 ; j=5 ;n=i++ * ++j ;
    		System.out.println("C: i= "+j+" n="+n);
    	}
    
    }
    

    et voici le resultat :

    A: i= 1 n=0
    B:i 11 n=11
    C: i= 6 n=120
    

    je n arrive pas à comprendre cest résultats pourriez vous m 'aidez ?

    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2015 à 21:24:51

      Bonsoir 

      En fait i++ incrémente i de 1, donc si tu dis n = i++ n n'aura pas de valeur et i sera augmenté de 1. Il me semble qu'il faut mettre n = ++i ou n = i+1:)

      -
      Edité par AlphonseDodu 20 janvier 2015 à 21:26:00

      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2015 à 21:36:50

        okok merci donc là c est censé marcher?

        -
        Edité par alex5956 26 janvier 2015 à 13:29:09

        • Partager sur Facebook
        • Partager sur Twitter
          21 janvier 2015 à 9:30:28

          En fait, tu peux voir i++ et ++i comme des fonctions qui ont une action et qui retournent une valeur.

          i++ :

          • action - ajouter 1 à i
          • retourne la valeur initiale de i

          ++i :

          • action - ajouter 1 à i
          • retourne la valeur finale de i
          • Partager sur Facebook
          • Partager sur Twitter
            24 janvier 2015 à 14:16:32

            tu veux dire quoi quand tu dis ça ? 

            i++ :

            • action - ajouter 1 à i
            • retourne la valeur initiale de i
            • Partager sur Facebook
            • Partager sur Twitter
              24 janvier 2015 à 14:59:28

              Si i vaut 5 et que tu fais i++, ça augmente i de 1 mais ça retourne 5 (la valeur avant l'incrémentation).

              Donc

              int i = 5;
              System.out.println(i++); // Affiche 5



              • Partager sur Facebook
              • Partager sur Twitter
                24 janvier 2015 à 15:30:18

                euh non dsl je voulais dire : 

                ++i :

                • action - ajouter 1 à i
                • retourne la valeur finale de i
                • Partager sur Facebook
                • Partager sur Twitter
                  24 janvier 2015 à 17:56:31

                  Ca augmente i puis ça retourne sa valeur après l'incrémentation.

                  int i = 5;
                  System.out.println(++i); // Affiche 6

                  En fait, ++i est l'équivalent de i = i + 1.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 janvier 2015 à 13:22:41

                    c est tordu à quoi sert i++ dans ce cas? en tout cas merci !:)

                    -
                    Edité par alex5956 26 janvier 2015 à 14:02:49

                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 janvier 2015 à 14:23:21

                      il est surtout utilisé dans les boucle for :

                      for(int i=0; i<=10; i++) {
                        system.out.println("i=" + i);
                      }



                      • Partager sur Facebook
                      • Partager sur Twitter
                      Un homme azerty en vaut deux.
                        26 janvier 2015 à 15:56:44

                        Un exemple. Tu as un type Boite qui peut contenir 10 Bonbons.

                        public class Boite {
                            private Bonbon[] boite = new Bonbon[10];
                            private int nbBonbons = 0;
                        
                            public void ajouter(Bonbon bonbon) {
                                if (nbBonbons < 10) {
                                    boite[nbBonbons] = bonbon;
                                    nbBonbons += 1;
                                }
                            }
                        }

                        Dans ajouter, tu utilises le nombre de bonbons pour savoir dans quelle case mettre ton bonbon puis tu l'incrémentes. Tu peux combiner les lignes 7 et 8 en une seule comme ça.

                        boite[nbBonbons++] = bonbon;

                        Si tu veux un exemple de préopérateur, voici un exemple avec mangerBonbon qui enlève le dernier bonbon de la boîte.

                        public void mangerBonbon() {
                            if (nbBonbons > 0)
                               boite[--nbBonbons] = null;
                        }



                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 janvier 2015 à 18:57:42

                          oui mais dans les boucles  pourquoi on avance quand même dans ce cas si on met i++ au lieu de ++i ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 janvier 2015 à 19:24:28

                            Parce que dans une boucle, on n'a pas besoin de la valeur retournée par i++ ou ++i. On veut juste augmenter i. Donc, quand on n'a pas besoin de la valeur de retour, i++ ou ++i, ça fait l'affaire. Personnellement, j'utilise ++i dans mes boucles parce que c'est l'instruction la plus "naturelle" et "efficace" (pas besoin de garder la valeur avant incrémentation contrairement à i++).

                            Après, tu trouveras sûrement i++ dans 99% des cas quand la valeur de retour n'est pas utilisée. C'est juste que i++ est plus "populaire" même si ce n'est pas théoriquement "correct". Dans la pratique, i++ ou ++i dans une boucle, ça marche pareil.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              27 janvier 2015 à 22:39:22

                              Les 2 sont identiques :

                              for (initialisation; test; incrémentation) {
                              	// ...
                              }
                              
                              initialisation
                              while (test) {
                              	// ...
                              	incrémentation
                              }

                              Ainsi l'incrémentation i++ ou ++i aura le même résultat car tu n'as pas d'action particulière pendant/avant/après l'incrémentation.

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                                27 janvier 2015 à 23:20:55

                                le WHILE est tout de même plus propre que le FOR quand on ne sais pas combien de tour il faudra faire.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Un homme azerty en vaut deux.
                                  28 janvier 2015 à 10:18:11

                                  GuillaumeBo1 a écrit:

                                  le WHILE est tout de même plus propre que le FOR quand on ne sais pas combien de tour il faudra faire.

                                  Pas du même avis.

                                  Le développeur fait son boulot simplement avec un for, le compilateur fait son boulot en le transcrivant comme il le souhaite.
                                  Un peu comme le foreach et l'utilisation d'un Iterator.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                                    29 janvier 2015 à 5:02:53

                                    dans une boucle for on pas besoin de valeur retourneé mais comment il sait augmenter la valeur de 1 dans cd cas ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    probleme incrémentation

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown