我需要找到最佳的解决方案(主要是在复杂性/速度上,而不是可读性或RAM分配方面),以在条件为真时执行不同操作(例如函数调用)的自定义序列。如果错误,则必须停止该序列。这是一个解决方案作为示例:

/*This function starts when"condition = true", and

must stop running when"condition = false"*/

public void sequence(){

//Every function has a duration lower than a milisecond

function_a();

if( condition = false ) return;

function_b();

/*--------------------------------

same pattern * 20 (approximation)

---------------------------------*/

if( condition = false ) return;

function_z();

//END of the sequence

}

比上一个更具可读性的另一个示例:

public void sequence_switch(){

int currentStep = 0;

do{

switch(currentStep){

case 0:

function_a();

break;

case 1:

function_b();

break;

/*--------------------------------

same pattern * 20 (approximation)

---------------------------------*/

case 2:

function_z();

break;

}

currentStep ++;

}while( condition = true );

}

我一直在考虑异常,但是在某些情况下,它们会使程序变慢,也许不是这样吗?

更多信息:在大多数情况下(95%),该序列必须在执行前5个操作时停止,或者达到结束。 (想象一下机械臂必须在不同点移动物体,如果它没有正确抓住物体,它将很快掉落,因此不应执行以下所有操作)

条件为假时立即停止序列是至关重要的。

编辑:欢迎其他解决方案,但真正的答案是在效率方面进行比较。

此循环的理想情况是游戏中的宏:条件可能是"握住钥匙",并且如果您没有在正确的时间使用这个复杂的宏,则想取消它(不这样做)。希望程序继续执行此顺序,则要恢复对鼠标/键盘的完全控制)。但是,如果一切顺利,除非有极少数情况,否则您将一直坚持到最后。

如果使用java8,则可以将函数添加到列表中,并使用循环调用它们。

您写了" ..必须在执行前5个操作时停止",我们在这里谈论多线程吗?

@JoakimDanielson我们可以谈论多线程,因为继续执行序列所需的"条件"在此" sequence()"函数中不会改变。它的更新实际上将来自另一个线程/进程。

您是否考虑过在此"其他线程"中设置变量而不是将变量发送到您的第一个线程(我们在此讨论的那个线程)。然后可能会发生Interrupt异常,您只需要在外部捕获即可。

@LucA每个函数返回什么?如果不涉及多线程,则可以执行return function_a() && function_b() && function_c()....并使每个函数返回布尔值true或false。

@ vivek_23没有一个函数必须返回任何内容,主要的一点是能够启动此序列并停止它。

@Alfe我考虑了例外,我在问题中写了它。我想对速度进行一些比较,因为异常可能非常慢(大约5毫秒)。但是您是对的,使用异常是停止序列的另一种解决方案。问题是,哪种效率更高?

@LucA您说过It is CRUCIAL to stop the sequence as soon as the condition is false.,那么您如何知道何时停止?我看到您在第一次尝试中做了if( condition = false )。

@ vivek_23序列中的"检查"位于一些非常快速的操作之后:"每个函数的持续时间都小于毫秒"。即使在游戏中,这也不是问题。但是我知道你要去哪里,有异常会随时检测到情况。问题在于:在什么条件下,if列表(示例1)将比异常更快地停止序列?但是,如果我们不必停止序列,这些速度会慢多少?我的问题的重点是要在这些想法之间找到平衡。

您的第一个解决方案具有完美的性能,不可能做得更好。

也许不完整,但是有效的答案。 谢谢。

如果您愿意牺牲可读性,那么总会有提升性能的空间。 在这种情况下,您可以内联函数代码,而不是调用它们。 (顺便说一下,这表明了整个问题的责任。)

java条件操作_关于java:条件为true时,从头开始执行各种操作的顺序相关推荐

  1. java 多线程 临界区_【Java并发性和多线程】竞态条件与临界区

    本文为转载学习 在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源.如,同一内存区(变量,数组,或对象).系统(数据库,web services等)或文件.实际上,这些问题只有 ...

  2. java 分割一个_分割java

    [java]分割字符串工具类,霸气 jdk自带的 java 分割字符串,分割string,可以根据多个条件去分割.比如逗号,分号,逗号或者分号. 比如一个字符串:"abc,def;gh,ij ...

  3. java 字符串包_包java字符串

    Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...

  4. java path类_基于java Files类和Paths类的用法(详解)

    Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...

  5. c 与java 反射性能_谈谈Java 反射的快慢

    [相关学习推荐:java基础教程] 反射到底是好是坏 说到Java 中的反射,初学者在刚刚接触到反射的各种高级特性时,往往表示十分兴奋,甚至会在一些不需要使用反射的场景中强行使用反射来「炫技」.而经验 ...

  6. java 刷新界面_利用java如何实现在删除信息后刷新页面功能

    利用java如何实现在删除信息后刷新页面功能 发布时间:2020-11-17 14:25:49 来源:亿速云 阅读:74 作者:Leah 这篇文章给大家介绍利用java如何实现在删除信息后刷新页面功能 ...

  7. 纯java分布式内存数据库_最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发...

    最近可能有点闲的慌,没事就去找面试面经,整理了一波面试题.我大概是分成了Java基础.中级.高级,分布式,Spring架构,多线程,网络,MySQL,Redis缓存,JVM相关,调优,设计模式,算法与 ...

  8. java多线程编程_《java多线程编程实战指南》读书笔记 -- 基本概念

    展开 并发:多个线程操作相同资源,保证线程安全,合理使用资源 高并发:服务能同时处理多个请求,提高程序性能 测试上下文切换工具 Lmbench3 测量上下文切换时长 vmstat 测量上下文切换次数 ...

  9. java 异常对象_在java中的异常处理中的异常对象是什么

    展开全部 Exception类以及他的子类 的一个实例对象 比如32313133353236313431303231363533e58685e5aeb931333264633563 常见异常 1. j ...

  10. java内存漏洞_处理Java程序中的内存漏洞

    Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...

最新文章

  1. Processing入门教程-Processing的“前世今生”
  2. php 汉字转拼音及获取拼音首字母
  3. kettle org.pentaho.ui.xul.XulException: java.lang.reflect.InvocationTargetException
  4. DTC Sprint总结——管理经验篇
  5. GBASE 8s UDR内存管理_05_mi_free
  6. IMAC双系统WIN下截屏快捷键
  7. EasyTest 接口自动化测试平台 搭建手顺
  8. DeepLearning4j-使用Java训练YOLO模型
  9. android 通知栏设置,安卓手机通知栏介绍:安卓手机通知栏设置方法
  10. 计算机外文文献论文翻译,外文文献+翻译--计算机专业论文
  11. 360度全景拼接之成像模型与柱面投影
  12. logisim反应时间计时器设计
  13. C#中线程安全的单例模式
  14. Leakcanary的使用
  15. 永磁同步电机磁链观测Matlab仿真,基于磁链观测器的永磁同步电动机无传感器控制技术研究...
  16. Python有限差分法——向前差分,向后差分和中心差分的Python程序
  17. 拼多多创始人黄峥身价达3200亿,超越马云成中国第二大富豪
  18. 关闭research_Microsoft Research的新数码照片技术已集成到Microsoft Digital Image Suite 9中...
  19. win32 注册表操作API
  20. 第六届全国信息技术应用水平大赛Java组复赛A卷试题答案

热门文章

  1. 单应性Homograph估计:从传统算法到深度学习
  2. SilhoNet:一种用于3D对象位姿估计和抓取规划的RGB方法
  3. 如何在MFC中使用cout和printf,输出到控制台
  4. LeetCode 1024. 视频拼接
  5. RDKit | 基于RDKit(≥2020.09.1)的相似图绘制新方法
  6. Anaconda | CentOS7 -解决 Python2和Python3共存
  7. microbiomeMarker:整合多种biomarker分析工具的R包
  8. MPB:军科院杨瑞馥、毕玉晶等-​​培养组学方法优化(视频)
  9. NBT:设计稳定无毒的抗菌肽杀灭耐药菌
  10. Cell | 小基因开启微生物组研究新领域——大规模鉴定微生物基因组编码的小蛋白质...