web-dev-qa-db-fra.com

Comment faire pour les boucles en Java augmenter par incréments autres que 1

Si vous avez une boucle comme celle-ci:

for(j = 0; j<=90; j++){}

Ça fonctionne bien. Mais quand vous avez une boucle comme ça:

for(j = 0; j<=90; j+3){}

ça ne marche pas. Quelqu'un pourrait-il m'expliquer cela?

64
TomLisankie

C’est parce que j+3 ne change pas la valeur de j. Vous devez remplacer cela par j = j + 3 ou j += 3 pour que la valeur de j soit augmentée de 3:

for (j = 0; j <= 90; j += 3) { }
96
user557219

Comme personne d’autre n’a réellement abordé Could someone please explain this to me?, je crois que je vais:

j++ est un raccourci, ce n'est pas une opération réelle (ok c'est vraiment IS, mais supportez-moi pour l'explication)

j++ est vraiment égal à l'opération j = j + 1; sauf que ce n'est pas une macro ou quelque chose qui effectue un remplacement en ligne. Il y a beaucoup de discussions ici sur les opérations de i+++++i et ce que cela signifie (parce que cela pourrait être interprété comme i++ + ++i OR (i++)++ + i

Ce qui nous amène à: i++ versus ++i. Ils s'appellent les opérateurs post-increment et pre-increment. Pouvez-vous deviner pourquoi ils portent ce nom? La partie importante est la façon dont ils sont utilisés dans les affectations. Par exemple, vous pourriez faire: j=i++; ou j=++i; Nous allons maintenant faire un exemple d'expérience:

// declare them all with the same value, for clarity and debug flow purposes ;)
int i = 0;
int j = 0;
int k = 0;

// yes we could have already set the value to 5 before, but I chose not to.
i = 5;

j = i++;
k = ++i;

print(i, j, k); 
//pretend this command prints them out nicely 
//to the console screen or something, it's an example

Quelles sont les valeurs de i, j et k?

Je vais vous donner les réponses et vous laisser résoudre le problème;)

i = 7, j = 5, k = 7; C'est la puissance des opérateurs pré et post incrément, et les risques de les utiliser mal. Mais voici la manière alternative d'écrire ce même ordre d'opération:

// declare them all with the same value, for clarity and debug flow purposes ;)
int i = 0;
int j = 0;
int k = 0;

// yes we could have already set the value to 5 before, but I chose not to.
i = 5;

j = i;
i = i + 1; //post-increment

i = i + 1; //pre-increment
k = i;

print(i, j, k); 
//pretend this command prints them out nicely 
//to the console screen or something, it's an example

Ok, maintenant que je vous ai montré comment fonctionne l'opérateur ++, examinons pourquoi cela ne fonctionne pas pour j+3 ... Vous vous rappelez comment je l'ai appelé "sténographie" plus tôt? C'est juste ça, voir le deuxième exemple, parce que c'est effectivement ce que le compilateur fait avant d'utiliser la commande (c'est plus compliqué que cela, mais ce n'est pas pour les premières explications). Ainsi, vous verrez que le "raccourci étendu" a i = ET i + 1, ce qui est tout ce que votre demande a.

Cela remonte aux mathématiques. Une fonction est définie où f(x) = mx + b ou une équation y = mx + b alors appelons-nous mx + b ... ce n'est certainement pas une fonction ou une équation. Tout au plus c'est une expression. Ce qui est tout j+3 est, une expression. Une expression sans affectation ne nous sert à rien, mais elle prend du temps CPU (en supposant que le compilateur ne l'optimise pas).


J'espère que cela clarifie les choses pour vous et vous laisse un peu de place pour poser de nouvelles questions. À votre santé!

38
jcolebrand

Dans votre exemple, j+=3 incrémente de 3.

(Pas grand chose à dire ici, si c'est lié à la syntaxe, je suggèrerais d'abord Google, mais je suis nouveau ici, donc je peux me tromper)

9
Connor
for(j = 0; j<=90; j = j+3)
{

}

j+3 n'affectera pas la nouvelle valeur à j, ajouter j=j+3 affectera la nouvelle valeur à j et la boucle avancera de 3. 

j++ revient à dire j = j+1, donc dans ce cas, vous affectez la nouvelle valeur à j comme celle ci-dessus.

7
Abraham Adam

Changement 

for(j = 0; j<=90; j+3)

à 

for(j = 0; j<=90; j=j+3)
6
Aravind R. Yarram

Ça devrait être comme ça

for(int j = 0; j<=90; j += 3) 

mais méfiez-vous 

for(int j = 0; j<=90; j =+ 3) 

ou 

for(int j = 0; j<=90; j = j + 3)
4
Konz Mama

Si vous avez une boucle comme celle-ci:

for(j = 0; j<=90; j++){}

Dans cette boucle, vous utilisez un raccourci fourni par le langage Java, qui signifie un opérateur postfixe (use-then-change) équivalent à j = j + 1. La valeur modifiée est donc initialisée et utilisée pour l'opération suivante.

for(j = 0; j<=90; j+3){}

Dans cette boucle, vous augmentez simplement votre valeur de 3 sans l'initialiser à la variable j, de sorte que la valeur de j reste modifiée.

0
shraddha bhardwaj

Essayez simplement ceci

for(int i=0; i<5; i=i+2){//value increased by 2
//body
}

OR

for(int i=0; i<5; i+=2){//value increased by 2
//body
}
0
Abdul Basit Rishi

La partie "incrémentation" d'une instruction de boucle doit modifier la valeur de la variable d'index pour avoir un effet quelconque. La forme abrégée de "++ j" est "j = j + 1". Ainsi, comme d’autres réponses l’ont dit, la forme correcte de votre incrément est "j = j + 3", ce qui n’a pas un raccourci court comme un incrément. "j + 3", comme vous le savez maintenant, ne change pas réellement j; c'est une expression dont l'évaluation n'a pas d'effet.

0
warrenm
for(j = 0; j<=90; j++){}

j ++ signifie j = j + 1, j valeur déjà 0 maintenant nous ajoutons 1 donc maintenant la valeur somme de j + 1 devient 1, enfin nous remplaçons la valeur j (0) par la valeur somme (1). Donc, ici, nous remplaçons la valeur j par j + 1. Ainsi, chaque itération j sera incrémentée de 1.

for(j = 0; j<=90; j+3){}

Ici j + 3 signifie que j valeur déjà 0 maintenant nous ajoutons 3 donc maintenant la valeur de somme de j + 3 est devenue 3 mais nous ne remplaçons pas la valeur j existante. Pour que la machine virtuelle Java demande au programmeur, vous calculez la nouvelle valeur mais vous affectez cette valeur à la variable (i.e j). C'est pourquoi nous obtenons une erreur de compilation "AssignmentOperator non valide".

Si nous ne voulons pas incrémenter j la valeur de 3, nous pouvons utiliser l’une des méthodes suivantes.

 for (int j=0; j<=90; j+=3)  --> here each iteration j value will be incremented by 3.
 for (int j=0; j<=90; j=j+3) --> here each iteration j value will be incremented by 3.  
0
Gopi Rajkumar