我的小程序有点问题。

我有一个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);这会中断整个程序或引发异常,并希望循环能够处理它。也许发布您的完整代码?另外,请在您的问题中添加"作业"标签。

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

  1. java 调用对象的方法_JAVA调用对象方法的执行过程

    JAVA调用对象方法的执行过程: ①.编译器查看对象的声明类型和方法名.假设调用x.f(parameter),  且隐式参数x声明为C类型的对象,有可能在C对象中存在多个参数类型和参数个数不同的f的方 ...

  2. java 简单的调用类_java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊...

    java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...

  3. java调用方法_JAVA中方法的调用(详细整理)

    JAVA中方法的调用主要有以下几种: 1.非静态方法 非静态方法就是没有 static 修饰的方法,对于非静态方法的调用,是通过对 象来调用的,表现形式如下. 对象名.方法() eg: public ...

  4. java动态方法_Java 动态方法调用

    Java 动态方法调用 在Java中,如果方法重写只是一种名字空间的编写,那么它最多是让人感到有趣,但没有实际价值,但情况并非如此.方法重写构造成了Java最大的一个概念基础:动态方法调度(dynam ...

  5. java怎么调用存储过程_Java调用存储过程的2种方法

    creat proc proc_select @pid varchar(20) @address varchar(20) output as select @address=address from ...

  6. java调用接口实现的方法_java调用接口的实现方法

    java调用接口的实现方法 发布时间:2020-06-29 11:08:46 来源:亿速云 阅读:78 作者:Leah 本篇文章给大家分享的是有关java调用接口的实现方法,小编觉得挺实用的,因此分享 ...

  7. java对于数组的定义_Java中方法的定义与使用,以及对数组的初步了解。

    方法 方法的含义 定义: 方法就是用来完成解决某件事情或实现某个功能的办法. 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能--通常是处理文本,控制输入或计算数值. 我们可以通过在程序代码 ...

  8. java怎么实现字符串反转_Java多种方法实现字符串反转!

    来自牛客网 题目描述 接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串.(字符串长度不超过1000). 示例  输入:abcdefg 输出:gfedcba 解决思路 (主函数中实现)1. ...

  9. java自学方法_JAVA自学 方法

    方法的分类(封装): 带参数的方法,带返回值的方法 带参数的方法: 在某些特殊时候方法在执行的时候需要调用提供值, 例如购买东西,调用处需要传入的参数:钱,物品名称 带参数的方法定义语法结构: pub ...

  10. 仿照java做一个脚本语言_java调用其它语言脚本(python、js)

    1.背景 之前用开发过程一些功能如图像处理.相似度计算.水印等需要调用算法写的方法,但是算法一般都是用python语言进行开发.所以经常直接用java调用python脚本文件.在网上搜了很多方法也排了 ...

最新文章

  1. 敏捷软件开发的12个原则
  2. MySQL中的联合查询
  3. u-boot-1.3.4移植到mini2440+128M nand boot(3)
  4. 关于python读取文件的规则
  5. Dubbo 需求、架构、使用Demo
  6. nginx配置文件中参数的作用
  7. 提前为小米11让路?小米10高配版官网已缺货
  8. mysql语法错误文件_使用logstash同步MySQL的数据时,在jdbc查询sql文件时报sql语法错误,sql文件是navicat生成的...
  9. 一天搞懂深度学习(李宏毅)-学习笔记
  10. 网卡参数设置建议与各个网卡参数含义详解
  11. 解耦——Hybrid H5跨平台性思考
  12. 音视频开发之Android端native层播放音频三种方式
  13. 记一次瞬时网络挂起和XMLHttpRequest: 网络错误 0x2eff
  14. tidyverse笔记——tidyr包
  15. 微信小程序支付PHP实例
  16. php反向解析ip,什么是反向IP查找
  17. 材料学转计算机科学,科学网-[转载]【计算机科学】【2018.12】基于深度学习技术的材料识别-刘春静的博文...
  18. 关于聊天记录数据库表结构设计
  19. Matplotlib新手上路(下)
  20. 电商软件开发公司排名

热门文章

  1. @所有人,云计算喊你一起来学习!
  2. 计算机编程pdf百度云,计算机编程基础.pdf
  3. mysql 查询auto_increment_MySQL查询数据表的Auto_Increment(自增id)
  4. 数据装载器连接其他oracle数据库_07
  5. Haproxy 管控台介绍
  6. Dubbo Zookeeper Quick Start
  7. mybatis plus实现多表分页条件查询
  8. 计算机桌面图标变成腾讯图标,桌面图标变成了未知图标
  9. PWN题[强网先锋]no_output
  10. 防火墙设置导致服务器站点打开,服务器、网站、环境配置全正常网站打不开原来是系统防火墙造成的...