java条件操作_关于java:条件为true时,从头开始执行各种操作的顺序
我需要找到最佳的解决方案(主要是在复杂性/速度上,而不是可读性或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时,从头开始执行各种操作的顺序相关推荐
- java 多线程 临界区_【Java并发性和多线程】竞态条件与临界区
本文为转载学习 在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源.如,同一内存区(变量,数组,或对象).系统(数据库,web services等)或文件.实际上,这些问题只有 ...
- java 分割一个_分割java
[java]分割字符串工具类,霸气 jdk自带的 java 分割字符串,分割string,可以根据多个条件去分割.比如逗号,分号,逗号或者分号. 比如一个字符串:"abc,def;gh,ij ...
- java 字符串包_包java字符串
Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...
- java path类_基于java Files类和Paths类的用法(详解)
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...
- c 与java 反射性能_谈谈Java 反射的快慢
[相关学习推荐:java基础教程] 反射到底是好是坏 说到Java 中的反射,初学者在刚刚接触到反射的各种高级特性时,往往表示十分兴奋,甚至会在一些不需要使用反射的场景中强行使用反射来「炫技」.而经验 ...
- java 刷新界面_利用java如何实现在删除信息后刷新页面功能
利用java如何实现在删除信息后刷新页面功能 发布时间:2020-11-17 14:25:49 来源:亿速云 阅读:74 作者:Leah 这篇文章给大家介绍利用java如何实现在删除信息后刷新页面功能 ...
- 纯java分布式内存数据库_最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发...
最近可能有点闲的慌,没事就去找面试面经,整理了一波面试题.我大概是分成了Java基础.中级.高级,分布式,Spring架构,多线程,网络,MySQL,Redis缓存,JVM相关,调优,设计模式,算法与 ...
- java多线程编程_《java多线程编程实战指南》读书笔记 -- 基本概念
展开 并发:多个线程操作相同资源,保证线程安全,合理使用资源 高并发:服务能同时处理多个请求,提高程序性能 测试上下文切换工具 Lmbench3 测量上下文切换时长 vmstat 测量上下文切换次数 ...
- java 异常对象_在java中的异常处理中的异常对象是什么
展开全部 Exception类以及他的子类 的一个实例对象 比如32313133353236313431303231363533e58685e5aeb931333264633563 常见异常 1. j ...
- java内存漏洞_处理Java程序中的内存漏洞
Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...
最新文章
- Processing入门教程-Processing的“前世今生”
- php 汉字转拼音及获取拼音首字母
- kettle org.pentaho.ui.xul.XulException: java.lang.reflect.InvocationTargetException
- DTC Sprint总结——管理经验篇
- GBASE 8s UDR内存管理_05_mi_free
- IMAC双系统WIN下截屏快捷键
- EasyTest 接口自动化测试平台 搭建手顺
- DeepLearning4j-使用Java训练YOLO模型
- android 通知栏设置,安卓手机通知栏介绍:安卓手机通知栏设置方法
- 计算机外文文献论文翻译,外文文献+翻译--计算机专业论文
- 360度全景拼接之成像模型与柱面投影
- logisim反应时间计时器设计
- C#中线程安全的单例模式
- Leakcanary的使用
- 永磁同步电机磁链观测Matlab仿真,基于磁链观测器的永磁同步电动机无传感器控制技术研究...
- Python有限差分法——向前差分,向后差分和中心差分的Python程序
- 拼多多创始人黄峥身价达3200亿,超越马云成中国第二大富豪
- 关闭research_Microsoft Research的新数码照片技术已集成到Microsoft Digital Image Suite 9中...
- win32 注册表操作API
- 第六届全国信息技术应用水平大赛Java组复赛A卷试题答案
热门文章
- 单应性Homograph估计:从传统算法到深度学习
- SilhoNet:一种用于3D对象位姿估计和抓取规划的RGB方法
- 如何在MFC中使用cout和printf,输出到控制台
- LeetCode 1024. 视频拼接
- RDKit | 基于RDKit(≥2020.09.1)的相似图绘制新方法
- Anaconda | CentOS7 -解决 Python2和Python3共存
- microbiomeMarker:整合多种biomarker分析工具的R包
- MPB:军科院杨瑞馥、毕玉晶等-​​培养组学方法优化(视频)
- NBT:设计稳定无毒的抗菌肽杀灭耐药菌
- Cell | 小基因开启微生物组研究新领域——大规模鉴定微生物基因组编码的小蛋白质...