et tu sors de la boucle en faisant un break ;Envoyé par ®om
Note du modérateur : ces messages proviennent d'un autre message ( Thread, Arrête toi je le veux !) et ont été déplacé car ils étaient Hors-Sujet
Envoyé par Kikito
et tu sors de la boucle en faisant un break ;Envoyé par ®om
Note du modérateur : ces messages proviennent d'un autre message ( Thread, Arrête toi je le veux !) et ont été déplacé car ils étaient Hors-Sujet
Envoyé par Kikito
Si tu as besoin de faire ça, c'est que tu as mal conçu ton algorithme...Envoyé par schniouf
En gros, si tu veux par exemple parcourir un tableau et t'arrêter quand tu trouves le résultat recherché, tu fais:
Si tu as des "//instructions 2" comme dans ton exemple (ce qui ne se présente que dans des cas particuliers - souvent tu peux réorganiser pour faire différemment-), il faut refaire un if(condition) { //instructions 2 } où condition est équivalente à la condition de ton while/for...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int i = 0; boolean contains = false; while(i < tab.length && !contains) { if(tab[i].equals("tachaine")) { contains = true; } i++; }
Envoyé par ®om
Ca marche très bien et je ne vois pas en quoi ce n'est pas propre. Après c'est vrai que j'ai appris à programmer de la manière dont tu le dis, mais bon. Le truc que je trouve vraiment dégueu c'est les goto
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public boolean contient() { int i = 0; while(i < tab.length) { if(tab[i].equals("tachaine")) return true; i++; } return false ; }
EDIT : on est en train de lui pourrir son post avec nos théories, vaudrait mieux arrêter ou bien ouvrir un nouveau post![]()
Là ça va, c'est un return, c'est pas un break... C'est moins correct qu'en le mettant à la fin, mais c'est plus acceptable qu'un break...Envoyé par schniouf
Voilà pourquoi... Un élément essentiel dans le développement de logiciels, c'est la maintenance. Et là, imagine tu dois modifier la méthode, pour traiter le résultat (plutôt que de le retourner), tu vas être obligé de modifier ta boucle (tu vas me dire, sur cet exemple, c'est pas coûteux), alors que si tu fais le return qu'à la fin, bah tu laisses ta boucle telle quelle...
Le problème du break/continue est aussi un problème de maintenance...
Imagine tu dois faire un traitement particulier...
Et en fait plus tard, tu veux rajouter une boucle "interne"...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for(int i = 0; i < tab.length; i++) { if(isOK(tab[i], 5) { //isOK caractéristique quelconque dépendante de l'entier passé en paramètre, qui renvoie un booléen break; } }
Et bien tu es obligé de refaire totalement ta boucle, car le break s'applique maintenant sur la boucle en j...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for(int i = 0; i < tab.length; i++) { for(int j = 0; j < tab2.length; j++) { if(isOK(tab[i], j) { //isOK caractéristique quelconque dépendante de l'entier passé en paramètre, qui renvoie un booléen break; } } }
Dans ce cas j'suis d'accord. Je m'incline.
ça n'est pas spécifique au Java, c'est les "bases" de l'algorithmique, que l'on doit appliquer en Java, en C, etc...Envoyé par manblaizo
Mais tu sais que tous les mots clé n'ont pas toujours la même signification d'un langage à un autre, et justement en Java, break et continue permettent de sortir d'une boucle sans avoir à exécuter les instructions suivantes dans la boucle. C'est ce qui est fait aussi dans un switch, s'il n'y a pas de break, toutes les instructions "case" suivantes sont exécutées jusqu'au premier break rencontré. Donc en principe ce comportement n'est pas lié à l'algorithmique mais bien à l'implémentation propre de chaque langage de programmation.Envoyé par ®om
Justement, en algorithmique, il est impossible d'exprimer un break/continue. Donc il ne "faut pas" les utiliser non plus dans les langages.Envoyé par manblaizo
Sinon, break/continue, quelque soit le langage, à ma connaissance ça a le même sens...
Partager