Oui et non.
Déjà for(int index=0; index==12; index++), fait :
- je déclare un int appelé index et j'y mets la valeur 0
- je teste s'il vérifie la condition, soit index==12, ce qui n'est pas le cas, puisqu'il vaut 0, donc je n'entre pas dans la boucle
Rapporté à ton cas :
for (int j = nbCol-1; j == 1; j--)
- si nbCol=2, alors j vaut 1, ]je teste la condition 1==1, oui, j'entre dans la boucle, j'y fais ce que j'ai faire, je fais j--, donc j vaut 0, donc j==1 est faux, je sors de la boucle et j'ai fait ce qu'on voulait
- sinon, si nbCol=4, par exemple, j vaut 3, je teste la condition qui est fausse, donc je n'entre pas dans la boucle - je ne déplace rien donc.
Maintenant si on remplaçait j==1 par j>=1, on pourrait entrer dans la boucle (sauf si nbCol vaut 1, mais il n'y aurait pas de déplacement à faire dans ce cas, donc on reste cohérent). Mais dans ce cas tu ne déplaces jamais l'élément situé tout à gauche, en colonne j=0. On peut optimiser en ne traitant pas l'élément situé tout à droite, donc en colonne j=nbCol-1, puisqu'il ne peut être déplacé à droite (il sortirait).
Donc, la boucle complète (qui traitera inutilement l'élément situé tout à droite) :
for(int j=nbCol-1; j>=0; j--)
La boucle optimisée :
for(int j=nbCol-2; j>=0; j--)
Partager