当前位置:  开发笔记 > 编程语言 > 正文

Java:来自被调用方法的"Break"循环?

如何解决《Java:来自被调用方法的"Break"循环?》经验,为你挑选了1个好方法。

我的小程序有点问题.我有一个JOptionPane要求一个数字,如果这个数字小于10,那么一个循环只会持续不断地做其中的内容,继续询问数字.在该循环中,我调用一个方法,使用int作为参数.在该方法中,我需要(不改变调用该方法的类中的任何代码)找出我输入的数字是否小于1.如果是,我需要调用另一种方法.那一点完成了.

但!mainloop不断滚动,所以它继续在循环中执行其他操作.我需要阻止它这样做,所以在方法的if语句中我需要打破方法所在的循环的特定迭代,并使其继续进行同一循环的新迭代,要求新号码.

第一类(例子):

number=Integer.parseInt( JOptionPane.showInputDialog( "bla bla" ) );
while (number !=- 10) {
  themethod(number);
  blah
  blah
  ...
}

被调用的方法(例子):

public void themethod(int number) {
  if (number<1) {
    call the other method
    break the iteration im in
  }

asveikau.. 7

你可以在这里做很多事情.最终你所做的应该取决于你的编码风格以及你想要完成的事情.

选项1将是以下的一些变体:

for (;;)
{
   int number = /* ... */;
   myMethod(number);
   if (number == -10)
      break;
}

您可能会相当主观地并且视情况而定,这是不好的,因为终止条件的知识包含在循环中而不是执行"实际工作"的方法中.也许你的循环没问题.也许在其他情况下(或者也许与其他程序员一起?这非常属于品味问题.)你可能想myMethod做出这个决定.一般来说,我自己的个人品味通常倾向于不在场景中的各种方法中分配场景知识,而是在一个地方.

因此,我将在此处撰写的大部分内容将是如何myMethod决定是否终止.

选项2 - myMethod返回一个布尔值,表示我们应该终止:

for (;;)
{
   int number = /* ... */;
   if (myMethod(number))
      break;
}

boolean myMethod(int number)
{
   // TODO - do stuff

   return number == -10;
}

但你可能会说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 /* ... */;
}

或者你可能更喜欢例外:

选项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();
}

如您所见,有很多选择.我相信人们可以花一整天时间谈论不同的方法.这是我见过的成语样本 - 我会警告你,自从我用Java做了很多事以来已经有一段时间了,所以我可能不会在这里编写最惯用的代码.:-)



1> asveikau..:

你可以在这里做很多事情.最终你所做的应该取决于你的编码风格以及你想要完成的事情.

选项1将是以下的一些变体:

for (;;)
{
   int number = /* ... */;
   myMethod(number);
   if (number == -10)
      break;
}

您可能会相当主观地并且视情况而定,这是不好的,因为终止条件的知识包含在循环中而不是执行"实际工作"的方法中.也许你的循环没问题.也许在其他情况下(或者也许与其他程序员一起?这非常属于品味问题.)你可能想myMethod做出这个决定.一般来说,我自己的个人品味通常倾向于不在场景中的各种方法中分配场景知识,而是在一个地方.

因此,我将在此处撰写的大部分内容将是如何myMethod决定是否终止.

选项2 - myMethod返回一个布尔值,表示我们应该终止:

for (;;)
{
   int number = /* ... */;
   if (myMethod(number))
      break;
}

boolean myMethod(int number)
{
   // TODO - do stuff

   return number == -10;
}

但你可能会说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 /* ... */;
}

或者你可能更喜欢例外:

选项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();
}

如您所见,有很多选择.我相信人们可以花一整天时间谈论不同的方法.这是我见过的成语样本 - 我会警告你,自从我用Java做了很多事以来已经有一段时间了,所以我可能不会在这里编写最惯用的代码.:-)

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有