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)将比异常更快地停止序列?但是,如果我们不必停止序列,这些速度会慢多少?我的问题的重点是要在这些想法之间找到平衡。

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值