<java>incrementation

domxaline -  
 domxaline -
Bonjour,
je suis débutant,le prg suivant marche bien,mais j'aimerai bien savoir,comment marche ce boucle
chaque passage de 0 à 8,si quelqu'un peut m'aider?je serai content
public class Icrem1 {
	
		public static void main(String[] args) 
		{
		
		int n,p;
		n=p=0;
               while(n<=8)n+=++p;
		{
			System.out.println("increment n= " + n);
			System.out.println("increment p= " + p);
		}
		
	}
}
Configuration: Windows Vista / Firefox 3.5.8

12 réponses

  1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
     
    I) les variables sont déclarées et initialisées à zéro
    int n,p;

    Petite remarque : la ligne suivante :
    n=p=0;
    est complètement inutile en java. En java les variables nombres sont toujours initialisés à 0 lorsqu'elles sont déclarées.

    II) la boucle du programme :
    while(n<=8)n+=++p;


    ce que je préfère (personnellement) réécrire comme ceci :
    while(n<=8) {
        n+=++p;
    }


    d'abord on teste pour savoir si n est plus petit ou égal à 8. On sortira donc de la boucle lorsque n sera strictement plus grand que 8.

    à chaque étape de la boucle on éxécute cette ligne :

    n+=++p;

    ceci signifie :
    1) avant toute chose, incrémenter p.
    2)ensuite, avec la nouvelle valeur de p, on exécute cette ligne :
    n+=p, ce qui est comme n=n+p.

    Ainsi, tu peux prendre un papier et un crayon (et une gomme) et marquer les valeurs de p et de n au fur et é mesure des itérations de la boucle. Tu verras ainsi comment les valeurs changent très facilement. Essaye et is-nous s'il y a qqchose que tu ne comprends pas.

    III) Les valeurs finales de n et p après la boucle sont affichées grâce au bloc
    {
        System. ....
        System....
    }

    Remarque : les accolades ici sont inutiles pour le programme. (éventuellement pour bien voir que ce bloc ne fait que de l'affichage, mais j'aurai plutôt tendance à dire que c'est source d'erreur, on pourrait croire que le programme boucle sur ce bloc alors que ce n'est pas le cas, le while ne va que sur l'instruction qui la suit.
    0
    1. danimo
       
      Salut Paco,

      Citation:
      "Petite remarque : la ligne suivante :
      n=p=0;est complètement inutile en java. En java les variables nombres sont toujours initialisés à 0 lorsqu'elles sont déclarées."

      Que donne ceci à la compilation ?

               int n;
              -------
              --------
               n++;
      

      javac n'aime pas:
      variable n might not have been initialized
      Alors?

      Cordialement,

      Dan
      0
      1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > danimo
         
        absolument, c'est un warning censé, le programmeur pourrait avoir oublié de préciser une valeur de départ, ça aurait pu ne pas être zéro.
        je t'accorde que c'est une bonne chose à faire, pour éviter ce warning et juste par habitude.
        je n'aurai même pas dû le dire effectivement.
        0
      2. danimo > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        Re,

        Pourquoi un warning ?
        C'est une erreur et la compilation est stoppée, ce qui oblige le programmeur à initialiser sa donnée alors qu'avec un message warning (exemple: on veut utiliser une méthode "deprecated") la compile abouti et on peut executer.
        Dans ce cas javac propose de lancer l'execution avec -Xlint:deprecation ce qui permettra d'abord de savoir quelle méthode est dépreciée et ensuite le n° de la ligne du code, ce que n'indique pas warning.

        Mais je m'éloigne du sujet...

        Cordialement,

        Dan
        0
  2. poowlyne Messages postés 19 Statut Membre
     
    Fais plutot une boucle for...
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      je pense plutot que c'est un programme d'exemple pour apprendre(mais je peux me tromper)
      cdlt
      0
  3. poowlyne Messages postés 19 Statut Membre
     
    en effet... Pardon XD
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. domxaline
     
    j'ai besoin encore votre aide
    quand 0 est inferieur egal 8 n+= ++p; //aimerais bien savoir quel est valeur de n et p
    quand 1 est inferieur egal 8 n+= ++p; //aimerais bien savoir quel est valeur de n et p
    quand 2 est inférieur égal 8 n+= ++p; //aimerais bien savoir quel est valeur de n et p
    quand 3 est inférieur égal 8 n+= ++p; //aimerais bien savoir quel est valeur de n et p

    je suis un peu confondu aidez moi s'il vous plaît
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      ok, faisons le pas à pas.
      n n'augmente pas de manière régulière...


      Au tout début, c'est clair que n=0 et p=0.


      Que se passe t'il lorsque la ligne n+= ++p est exécutée ?
      0
  6. domxaline
     
    lorsque la ligne n+= ++p est exécutée
    n=1, p=1
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      tout à fait exact.

      Et ensuite, lorsque cette ligne est exécutée une deuxième fois ?
      0
  7. domxaline
     
    n=2,p=1
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      non. Revois la ligne. Que fait-elle ?
      0
      1. domxaline > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        n=2,p=2
        0
      2. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > domxaline
         
        (désolé de la réponse tardive, je n'étais plus devant un ordi :) )

        non plus.

        Avant d'essayer encore, redis moi exactement ce que fais la ligne n += ++p . (elle fait deux choses, dans un ordre très précis)
        0
  8. domxaline
     
    s'il fait deux choses:
    n+= n aditionne 1
    ++p p aditionne 1
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      non ! l'ordre est faux et n n'est pas "additionné de 1". Il est incrémenté de p.
      Et c'est ans l'autre ordre !!! (d'abord p est incrémenté de 1, puis n est incrémenté de p).

      Relis mon premier post.

      Donc alors, que se passe t'il exactement lorsque la ligne est exécuté alors que n=1 et p=1 au début.
      0
      1. domxaline > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        Pacorabanix,Répond moi,s'il te plait
        0
  9. domxaline
     
    merci de m'aider
    excuse moi,si je raconte des conneries

    n=3 p=2
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      voilà, exactement :)

      pas de problème. Mais si je te donnais la solution tout de suite tu n'aurais pas compris je pense

      et ensuite, à la prochaine itération ?
      0
    2. domxaline > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
       
      bonjour,
      n 0, p 0 ;
      n 1, p 1 ;
      n 3, p 2 ;
      n 6, p 3 ;
      n 10 , p 4 ;
      n 15 , p 5 ;
      n 21 , p 6;
      n 28 , p 7;

      si c'est bon pour le cas de "p++"
      while(n<=8){
      n+=p++}
      

      explique moi s'il te plaît
      0
    3. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > domxaline
       
      oui c'est bon, tu as compris, mais tu as oublié une chose : la boucle s'arrette avant d'arriver aussi loin.

      Sinon pour le cas où c'est n+=p++

      c'est la même chose, sauf un point important : d'abord on incrémente n de la valeur actuelle de p, et ensuite on incrémente p (l'ordre inverse de ce qu'on a fait avant).

      C'est ce que signifie le fait de mettre " p++ " au lieu de "++p" dans le code.
      0
    4. domxaline > domxaline
       
      regarde, s'il te plait pour le code
      while(n<=8){
      n+=p++}
      


      n 0, p 0 ;
      n 1, p 0 ;
      n 2, p 1 ;
      n 4, p 2 ;
      n 7 , p 3 ;
      n 11 , p 4 ;
      0
    5. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > domxaline
       
      mmm pas tout à fait.

      attention, n est augmenté de la valeur de p. Donc :

      au départ :

      n=0, p=0 (comme tu as dit)

      et ensuite au premier passage de la boucle on fait
      n = n + p
      puis
      p=p+1

      donc ça donne quoi ?
      0
  10. domxaline
     
    Pacorabanix aide moi s'il te plaît
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      je t'ai aidé en te montrant la méthode. Maintenant c'est à toi d'essayer de comprendre la méthode, apprendre à lire un code, à le décortiquer, et à essayer de le faire "fonctionner" sur une feuille de papier avec un crayon et une gomme.

      si tu n'essayes rien, je laisse à quelqu'un d'autre le soin de t'aider.
      0
  11. domxaline
     
                    int n,p,i;
    		n=p=0;
    		while(n<5) 
    		{	
    		  n+=2;
    		  System.out.println("increment n= " + n);
    		  //System.out.println("increment p= " + p);
    		}
    		  p++;
    		  System.out.println("increment p= " + p);
    		  //System.out.println("increment p= " + p);
                    

    resultat est
    increment n= 2
    increment n= 4
    increment n= 6
    increment p= 1

    on va bien le passage de n 2 et 4
    mais pour passage de p,il va au direct 1
    pour voir le passage de p,que je dois faire?
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      Ok,

      n=p=0;
      while(n<5) n+=2;p++;


      n va avoir la valeur 0 (avant la boucle), puis 2, puis 4, puis 6.
      Et après p sera incrémenté de 1 (une seule fois), exactement comme tu as dit! Car l'instruction "p++" est hors de la boucle, et n'est donc exécutée qu'un seule fois

      Ensuite je ne comprends pas trop ta question "pour voir le passage de p,que je dois faire?"

      La suite du code c'est :

      while(n<5)
      {n+=2;p++};

      est-ce que cette boucle va être exécutée ?
      0
      1. domxaline > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        while(n<5)
        {
        n+=2;
        p++;
        }
        


        increment n= 2 increment p= 1
        increment n= 4 increment p= 2
        increment n= 6 increment p= 3

        n inferieur 5 est 4 donc 4+2=6 ;n=6
        p est =2 donc 2+1=3 ;p=3
        0
  12. danimo
     
    Salut,

    C'est un gag ou quoi (ou une mauvaise plaisanterie) ?

    Dis nous ce que tu penses des accolades présentes ici:

           while(n<5) 
           {	
           n+=2;
           System.out.println("increment n= " + n);
           //System.out.println("increment p= " + p);
           }
    

    Et où est faite l'incrémentation p++

    Dan
    0