chr*_*son 5 java iteration loops break
我的小程序有点问题.我有一个JOptionPane要求一个数字,如果这个数字小于10,那么一个循环只会持续不断地做其中的内容,继续询问数字.在该循环中,我调用一个方法,使用int作为参数.在该方法中,我需要(不改变调用该方法的类中的任何代码)找出我输入的数字是否小于1.如果是,我需要调用另一种方法.那一点完成了.
但!mainloop不断滚动,所以它继续在循环中执行其他操作.我需要阻止它这样做,所以在方法的if语句中我需要打破方法所在的循环的特定迭代,并使其继续进行同一循环的新迭代,要求新号码.
第一类(例子):
number=Integer.parseInt( JOptionPane.showInputDialog( "bla bla" ) );
while (number !=- 10) {
themethod(number);
blah
blah
...
}
Run Code Online (Sandbox Code Playgroud)
被调用的方法(例子):
public void themethod(int number) {
if (number<1) {
call the other method
break the iteration im in
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里做很多事情.最终你所做的应该取决于你的编码风格以及你想要完成的事情.
选项1将是以下的一些变体:
for (;;)
{
int number = /* ... */;
myMethod(number);
if (number == -10)
break;
}
Run Code Online (Sandbox Code Playgroud)
您可能会相当主观地并且视情况而定,这是不好的,因为终止条件的知识包含在循环中而不是执行"实际工作"的方法中.也许你的循环没问题.也许在其他情况下(或者也许与其他程序员一起?这非常属于品味问题.)你可能想myMethod做出这个决定.一般来说,我自己的个人品味通常倾向于不在场景中的各种方法中分配场景知识,而是在一个地方.
因此,我将在此处撰写的大部分内容将是如何myMethod决定是否终止.
选项2 - myMethod返回一个布尔值,表示我们应该终止:
for (;;)
{
int number = /* ... */;
if (myMethod(number))
break;
}
boolean myMethod(int number)
{
// TODO - do stuff
return number == -10;
}
Run Code Online (Sandbox Code Playgroud)
但你可能会说myMethod已经想要返回其他类型.我来自非常C的背景,所以我最常用的成语是"out参数".引导我选择3:
选项3 - Out参数允许调用者决定终止:
public class CancelIndicator
{
public boolean shouldCancel;
};
CancelIndicator cancel = new CancelIndicator();
while (!cancel.shouldCancel)
{
int number = /* ... */;
myMethod(number, cancel);
}
int myMethod(int number, CancelIndicator cancel)
{
// TODO - do stuff.
cancel.shouldCancel = (number == -10);
return /* ... */;
}
Run Code Online (Sandbox Code Playgroud)
或者你可能更喜欢例外:
选项3:
public class CancellationException extends Exception
{
}
try
{
for (;;)
{
int number = /* ... */;
myMethod(numberl);
}
}
catch (CancellationException ex)
{
}
void myMethod(int number) throws CancellationException
{
// TODO - do stuff.
if (number == -10)
throw new CancellationException();
}
Run Code Online (Sandbox Code Playgroud)
如您所见,有很多选择.我相信人们可以花一整天时间谈论不同的方法.这是我见过的成语样本 - 我会警告你,自从我用Java做了很多事以来已经有一段时间了,所以我可能不会在这里编写最惯用的代码.:-)
添加一个返回值,指示 while 应该中断:
public boolean themethod(int number) {
if(number<1) {
call the other method
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
然后:
while(number !=-10) {
if(themethod(number)) break;
bla
bla
...
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果您无法更改 while 代码,请从该方法引发异常:
public void themethod(int number) {
if(number<1) {
call the other method
throw new RuntimeException("Negative Number");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12918 次 |
| 最近记录: |