<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);
		}
		
	}
}
A voir également:

12 réponses

Pacorabanix Messages postés 3248 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
Utilisateur anonyme
 
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
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663 > Utilisateur anonyme
 
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
Utilisateur anonyme > Pacorabanix Messages postés 3248 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
poowlyne Messages postés 19 Statut Membre
 
Fais plutot une boucle for...
0
Pacorabanix Messages postés 3248 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
poowlyne Messages postés 19 Statut Membre
 
en effet... Pardon XD
0
domxaline
 
merci beaucoup votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Pacorabanix Messages postés 3248 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
domxaline
 
lorsque la ligne n+= ++p est exécutée
n=1, p=1
0
Pacorabanix Messages postés 3248 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
domxaline
 
n=2,p=1
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
non. Revois la ligne. Que fait-elle ?
0
domxaline > Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention  
 
n=2,p=2
0
Pacorabanix Messages postés 3248 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
domxaline
 
s'il fait deux choses:
n+= n aditionne 1
++p p aditionne 1
0
Pacorabanix Messages postés 3248 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
domxaline > Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention  
 
Pacorabanix,Répond moi,s'il te plait
0
domxaline
 
merci de m'aider
excuse moi,si je raconte des conneries

n=3 p=2
0
Pacorabanix Messages postés 3248 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
domxaline > Pacorabanix Messages postés 3248 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
Pacorabanix Messages postés 3248 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
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
Pacorabanix Messages postés 3248 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
domxaline
 
Pacorabanix aide moi s'il te plaît
0
Pacorabanix Messages postés 3248 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
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
Pacorabanix Messages postés 3248 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
domxaline > Pacorabanix Messages postés 3248 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
Utilisateur anonyme
 
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