Java: “Break” en boucle à partir de la méthode appelée?
J'ai un petit problème avec mon petit programme.
J'ai un JOptionPane
demander pour un certain nombre, et si ce nombre est inférieur à 10, une boucle qui continue encore et toujours à faire ce qui est en elle, en gardant à demander des numéros. À l'intérieur de cette boucle, j'ai appeler une méthode, avec un int en paramètre. Dans la méthode, j'ai besoin d' (sans altérer le code de la classe qui appelle la méthode) de savoir si le nombre que j'ai saisie est inférieure à 1. Si elle l'est, j'ai besoin d'appeler une autre méthode. Que peu est fait.
Mais! Le mainloop continue à tourner, il continue à faire les autres choses dans la boucle. J'ai besoin d'arrêter de faire ça, donc dans le if dans la méthode que j'ai besoin de briser spécifiques itération de la boucle de la méthode, et de le faire passer à une nouvelle itération de la boucle, de demander un nouveau numéro.
Le premier de la classe (exemple):
number=Integer.parseInt( JOptionPane.showInputDialog( "bla bla" ) );
while (number !=- 10) {
themethod(number);
blah
blah
...
}
La méthode appelée (exemple):
public void themethod(int number) {
if (number<1) {
call the other method
break the iteration im in
}
qui boucle vous voulez briser? est-il une autre boucle à l'intérieur de theMethod?
Il est impossible, sans modifier le code dans la boucle. La pièce qui est dans la classe, et les classes peut pas changer?
OriginalL'auteur minimyran | 2011-12-11
Vous devez vous connecter pour publier un commentaire.
Il y a un certain nombre de choses que vous pouvez faire ici. En fin de compte ce que vous faites doit tout dépend de votre style de codage et de ce que vous essayez d'accomplir.
L'Option 1 serait une variation de:
Vous pourriez dire que, plutôt de manière subjective et selon les circonstances, que ce qui est mauvais, parce que la connaissance de la résiliation condition est contenue dans la boucle plutôt que de la méthode de faire le "vrai travail". Peut-être pour votre boucle c'est OK. Peut-être dans d'autres circonstances (ou peut-être avec d'autres programmeurs? C'est beaucoup une question de goût.) vous voudrez peut-être faire
myMethod
prendre cette décision. En général mon propre goût personnel généralement se penche vers ne pas avoir de scénario connaissances seront distribués tout au long des différentes méthodes dans la source, mais dans un seul endroit.De sorte que la plupart de ce que je vais écrire de la façon de faire
myMethod
prendre la décision quant à savoir si ou de ne pas résilier.Option 2 -
myMethod
renvoie un booléen qui indique que nous devrions mettre fin à:Mais vous pourriez dire que
myMethod
veut déjà revenir un autre type. Je viens très souvent du C de fond de sorte que le langage dont je suis le plus utilisé pour serait le "paramètre de sortie". Ce qui m'a option 3:Option 3 paramètre vous permet de décider de l'appelant à mettre fin à:
Ou peut-être vous êtes de plus en plus fan des exceptions:
Option 3:
Comme vous pouvez le voir, il ya un certain nombre d'options. Je suis sûr que l'on pourrait passer une journée entière à parler de différentes façons de le faire. Voici mon exemple de phrases idiomatiques j'ai vu - je vous préviens qu'il a été un certain temps depuis que je l'ai beaucoup fait en Java donc je ne pourrais pas écrire les plus idiomatiques code ici. 🙂
Merci! Quand j'ai vu le "throw new" chose que je suis, comment j'étais censé le faire.
Attendre, alors vous pourriez jeter une exception tout de même? Est-il une instruction catch dans le reste de la boucle?
Il me semble avoir manqué la partie où vous n'êtes pas autorisé à modifier le code. Si vous avez un instructeur vous disant cela, je pense que l'approche de l'éducation dans un très bêtement. C'est comme de dire: clou de cette baisse, mais ne pas utiliser un marteau.
OriginalL'auteur asveikau
Ajouter une valeur de retour indiquant que le tout devrait casser:
Alors:
Modifier: Si vous ne pouvez pas changer le tout en code, lever une exception de la méthode:
Que pouvez-vous alors?
Le contenu de la méthode...
Voir si la modifier permet de.
OriginalL'auteur Tudor
Attendre, alors je n'ai obtenir ce droit? Vous avez une boucle qui demande un nombre, fait quelque chose si le nombre n'est pas -10, et sinon les pauses?
Si si, regardez ceci:
Autrement, si ce n'est pas le cas, et que vous voulez couper dans les deux cas, l'-10 cas et la méthode est fausse cas, vous pouvez le faire:
Changer votre méthode pour renvoyer une valeur de type boolean. Si c'est vrai, alors ce n'est pas le casser. Si c'est faux alors il veut rompre, alors ce faire:
Si vraiment vous ne pouvez pas modifier la boucle, puis il suffit de lancer une exception de la méthode! Qui va quitter l'ensemble de votre programme. Je ne vois pas d'autre façon possible de le faire, cependant.
Attendre, et pourquoi vous ne pouvez pas vous modifiez la classe? Pouvez-vous modifier les conditions de la boucle?
C'est une mission et que la classe est donnée. Donc je ne peut Pas le changer..
Hmmm... puis il suffit d'appeler une exception. Qu'avez-vous fait dans la classe. Peut-être que de savoir qui va nous donner un indice quant à ce qu'ils s'attendent à ce que vous fassiez.
Nous avons talket à propos des exceptions, mais lorsque j'essaie d'ajouter qu'il ne marche pas encore.. Le problème est que quand j'entre dans l'une négative, l'méthodes d'après cette méthode est encore excecuted et elles ne sont pas si j'entre un nombre négatif
OriginalL'auteur eboix
Sans valeur de retour pour
themethod(int)
et sans changer les autres de la classe de code, ce n'est pas possible, car comme il est, il n'y a pas de retour de la communication. Vous aurez à changer à la fois; il ne peut pas se faire sans modification de la logique dans la boucle.Ensuite, il n'y a pas moyen de faire un contrôlés coupure de la boucle while; on ne pouvait faire Système.exit(0); qui rompt l'ensemble du programme ou de lever une exception et l'espoir de la boucle de traiter avec elle. Peut-être poster ton code complet? En outre, ajouter un "devoirs" de la balise à votre question s'il vous plaît.
OriginalL'auteur G. Bach