java如何循环调用方法_Java:调用方法的“中断”循环?

我的小程序有点问题。

我有一个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

}

只需返回一些错误代码,并在返回该代码时中断循环即可。

您想打破哪个循环? 方法内部是否还有另一个循环?

不更改while循环中的代码是不可能的。 哪个部分属于哪个班级,您不能更改哪个班级?

您可以在这里做很多事情。最终,您应该做什么取决于您的编码风格和您要完成的工作。

选项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

谢谢!当我看到"抛出新事物"时,我知道该怎么做。

等待,这样您就可以一直抛出异常?循环的其余部分是否有一些catch语句?

我似乎错过了不允许您修改代码的部分。如果您有一些讲师告诉您这一点,我认为他们以非常愚蠢的方式进行教育。就像在说:将其钉牢,但不要使用锤子。

添加一个返回值,指示while应该中断:

public boolean themethod(int number) {

if(number<1) {

call the other method

return true;

}

return false;

}

然后:

while(number !=-10) {

if(themethod(number)) break;

bla

bla

...

}

编辑:如果您无法更改while代码,请从方法中引发异常:

public void themethod(int number) {

if(number<1) {

call the other method

throw new RuntimeException("Negative Number");

}

}

我不能更改循环所在类的代码,也不能更改方法的类型:(

@ user1092483:那你能改变什么?

等等,我明白了吗?您有一个循环,要求输入一个数字,如果数字不是-10,会执行某些操作,否则会中断?

如果是这样,请查看以下内容:

while(true) {

number=Integer.parseInt( JOptionPane.showInputDialog("bla bla" ) );

if(number == -10) {

break;

}

themethod(number);

}

否则,如果不是这种情况,并且您想在两种情况(-10号情况和方法为错误的情况)下进行折断,则可以执行以下操作:

更改您的方法以返回布尔值。如果它是真的,那么它就不想破坏。如果它为假,则它想中断,然后执行以下操作:

while(true) {

number=Integer.parseInt( JOptionPane.showInputDialog("bla bla" ) );

if(number == -10) {

break;

}

if(!themethod(number)) break;

}

如果您确实无法编辑循环,则只需从方法中抛出异常即可!但是,这将退出整个程序。但是,我看不到任何其他可能的方式。

等等,为什么您不能编辑课程?您可以编辑循环条件吗?

嗯...然后只是调用一个异常。你在课堂上做什么。也许知道这会给我们一个提示,告诉他们他们期望您做什么。

我们有关于例外的讨论,但是当我尝试添加例外时,它仍然无法正常工作。问题是,当我输入一个负数时,该方法之后的方法仍然会执行,并且如果我输入一个负数,它们将失败。

也许您可以发布所有代码。我感觉这里还有更多我们看不到的东西。" bla"可以抓住答案的关键。

没有themethod(int)的返回值并且没有更改其他类的代码,这是不可能的,因为就这样,没有返回通信。您必须同时更改两者。如果不更改循环中的逻辑就无法做到这一点。

这样就无法从while循环中进行受控中断。你只能做System.exit(0);这会中断整个程序或引发异常,并希望循环能够处理它。也许发布您的完整代码?另外,请在您的问题中添加"作业"标签。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随机投点法计算定积分java_11 随机模拟积分 | 统计计算

11.4 高维定积分上面的两种计算一元函数定积分的方法可以很容易地推广到多元函数定积分&#xff0c;或称高维定积分。设\(d\)元函数\(h(x_1, x_2, \dots, x_d)\)定义于超矩形\[\begin{aligned}C \{(x_1, x_2, \ldots, x_d): a_i \leq x_i \leq b_i, i1,2,\ldots,d \}\end{alig…

java el ognl_EL和OGNL表达式的区分

OGNL是通常要结合Struts 2的标志一起使用&#xff0c;如 struts页面中不能单独使用&#xff0c;el可以单独使用 ${sessionScope.username}页面取值区别&#xff1a;名称servletognl elparametersre…

java query包,有没有Java的http_build_query函数的Java等价物?

I have a Map with my data and want to build a query string with it, just like I would with http_build_query on PHP. Im not sure if this code is the best implementation of it or if Im forgetting something?public String toQueryString(Map, ?> data) throw…

JAVA不同类型数组重载_java学习笔记--java中的方法与数组

方法完成特定功能的代码块方法的格式修饰符 返回值类型 方法名(参数类型 参数名1&#xff0c;参数类型 参数名2...){//方法体return 返回值&#xff1b;}方法的调用方式通过方法名调用方法根据形式参数列表将实际参数传递给方法定义方法的注意事项1.方法必须定义在类中2.方法与…

链表每k个反转 java_K 个一组翻转链表

leetcode第25题(困难)问题描述给你一个链表&#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回翻转后的链表。k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。示例&#xff1a;给…

java里面的scanner怎么关闭_作业。scanner怎么不能关闭

package try_catch; import java.util.Scanner; public class TryCatchPractice2 {//在类开始声明,则其他方法都能调用 Scanner in=new Scanner(System.in); NoBookException NoB=new NoBookException(); String[] books={"语文","数学","英语"…

java ddd 领域事件_Cribbb基于DDD/Domain Event领域事件的开源PHP通知系统

Cribbb是一个使用DDD聚合根和领域事件Domain Events概念开发的PHP开源通知框架&#xff1a;cribbb/cribbb GitHub几乎所有Web应用都有一个通知提醒系统&#xff0c;这些通知系统都有共有的属性和功能&#xff1a;一个发往用户的消息管道Cribbb通知系统扮演一种消息管道&#x…

java 自带导出excel_4.java项目页面导出excel功能

用的是SSM框架,字段根据自己的业务需求改1.前台页面导出/*导出按钮提交*/function downloadExcel(){$("#dynamicDownload").submit();}2.后台相关代码import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org…

php 运行外部程序_PHP在linux上执行外部命令的方法

目录&#xff1a;一、PHP中调用外部命令介绍二、关于安全问题三、关于超时问题四、关于PHP运行linux环境中命令出现的问题一、PHP中调用外部命令介绍在PHP中调用外部命令&#xff0c;可以用&#xff0c;1>调用专门函数、2>反引号、3>popen()函数打开进程&#xff0c;三…

php直播pk规则,直播源码中的主播PK功能是如何实现的

直播行业为赢得更广泛用户的青睐&#xff0c;自然要不断开发更有趣的玩法、模式&#xff0c;在直播源码中加入主播PK功能就是一种提高直播互动性、激发用户好胜心的方法&#xff0c;一方面这种方法可以吸引更多用户观看&#xff0c;增加主播的曝光率&#xff0c;另一方面它又能…

php中手机端ajax上拉加载更多,jQuery手机网页上拉加载更多

手机网页和PC网页都可以使用的上拉加载更多内容&#xff0c;其中LoadingDataFn自己改为ajax加载就可以了var page 1, //分页码off_on false, //分页开关(滚动加载方法 1 中用的)timers null; //定时器(滚动加载方法 2 中用的)//加载数据var LoadingDataFn function() {var …

phpcms上传php,phpcms如何上传视频

phpcms如何上传视频&#xff1f;phpcms-v9上传视频文件时的解决方案1.不建议直接在后台上传视频文件&#xff0c;因为视频文件一般都比较大&#xff0c;直接上传影响带宽&#xff1b;可先通过ftp工具将视频文件上传到指定目录&#xff0c;然后再后台引入视频文件的地址即可2.如…

护卫神怎么重启php,护卫神·主机大师如何开启php_opcache_护卫神

护卫神主机大师支持5.5至7.3这几个版本开启php_opcache扩展。一&#xff0c;先打开护卫神主机大师面板-常用操作-打开软件目录二&#xff0c;打开phpweb目录&#xff0c;找到要开启opcache的php版本&#xff0c;比如我这里要在php5.5中开启&#xff0c;进入php55目录&#xff0…

php 首页加背景图片,如何在页首添加一张背景图片

Navy主题如何在页首添加一张图片可以http://www.ikk.me/这样子顶部添加背景图片他的代码是【点击查看】回复内容&#xff1a;Navy主题如何在页首添加一张图片可以http://www.ikk.me/这样子顶部添加背景图片他的代码是【点击查看】看了下代码&#xff0c;就是给 section 加了个 …

php装箱,php兑现装箱算法

php实现装箱算法贪婪法是一种不追求最优解&#xff0c;只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解&#xff0c;因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择&#xff0c;而不考虑各种可能的整体情况&…

flash as3与后台php交互用户注册例子,as3与PHP后台交互2

怎么样&#xff0c;是不是也很方便的实现了as3和后台的数据传输&#xff1f;恩&#xff0c;现在我们的程序可以双向交互数据了&#xff0c;但这只是一些简单的数据&#xff0c;如果你要传输带有结构的数据&#xff0c;(熟悉as2的人都知道loadVars可以自动解析下载数据的结构)&a…

java 去除 quot,JAVA去除web页面传入后台的特殊字符工具类 | 学步园

package www.tmzskj.com.utils;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;/*** 功能 过滤特殊字符&#xff0c;清除掉所有特殊字符* regEx 为要清除的字符* author admin**/public class StringFilterTest {public static String …

matlab傅里叶工具箱,matlab通信工具箱.pdf

matlab通信工具箱randerr 产生随机误码图样randint 产生均匀分布的随机整数信号源 randsrc 用预定义的字母表产生随机矩阵wgn 产生高斯噪声commsrc.pattern 结构模式生成句柄berawgn 非编码的AWGN 信道的误比特率bercoding 编码的AWGN 信道的误比特率berconfint 蒙特卡罗仿真下…

java迭代器cas,java提高篇(三十)-Iterator - Java 技术驿站-Java 技术驿站

迭代对于我们搞Java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。Iterator iterator list.iterator();while(iterator.hasNext()){String string iterator.next();//do something}迭代其实我们可以简单地理解为遍历&#xff0c;是一个标准化遍历各类…

mysqldb mysql config,安装mysqldb python界面时找不到mysql_config

mySQLdb是一个用于mysql的python界面&#xff0c;但它不是mysql本身。 显然mySQLdb需要命令“mysql_config”&#xff0c;所以你需要先安装。你能否确认你是否通过从shell运行“mysql”来安装mysql本身&#xff1f; 这应该给你一个“mysql&#xff1a;command not found”以外的…