gpt4 book ai didi

java - 如何在Java中重构大量的if语句?

转载 作者:行者123 更新时间:2023-12-04 21:39:06 25 4
gpt4 key购买 nike

最近,我使用JVisualVM对一些代码进行了分析,发现一种特定的方法由于经常调用和执行速度慢而占用大量执行时间。该方法由一大堆if语句组成,如下所示:(在实际方法中,其中大约有30个)

    EcState c = candidate;

if (waypoints.size() > 0)
{
EcState state = defaultDestination();
for (EcState s : waypoints)
{
state.union(s);
}
state.union(this);
return state.isSatisfied(candidate);
}

if (c.var1 < var1)
return false;
if (c.var2 < var2)
return false;
if (c.var3 < var3)
return false;
if (c.var4 < var4)
return false;
if ((!c.var5) & var5)
return false;
if ((!c.var6) & var6)
return false;
if ((!c.var7) & var7)
return false;
if ((!c.var8) & var8)
return false;
if ((!c.var9) & var9)
return false;

return true;


有没有更好的方式编写这些if语句,还是应该在其他地方提高效率?

编辑:该程序使用进化科学来发展达到给定结果的途径。具体而言,为《星际争霸II》建立订单。此方法检查特定演化是否满足给定结果的条件。

最佳答案

首先,您使用&而不是&&,所以您没有利用短路评估的优势。也就是说,&运算符将要求同时评估&双方的两个条件。如果您确实在进行按位AND操作,则此方法将不适用,但如果不适用,请参见下文。

假设如果不满足条件,则返回true,则可以这样重写它(我将&更改为&&)。

return 
!(c.var1 < var1 ||
c.var2 < var2 ||
c.var3 < var3 ||
c.var4 < var4 ||
((!c.var5) && var5) ||
((!c.var6) && var6) ||
((!c.var7) && var7) ||
((!c.var8) && var8) ||
((!c.var9) && var9));


其次,您想尝试将最有可能满足条件的条件移到表达式链的顶部,这样可以节省对其余表达式的求值。例如,如果c1.var4
缺少这些,在这种方法上花费大量的时间似乎有点奇怪,除非这些情况影响了数据库或类似的事情。

关于java - 如何在Java中重构大量的if语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com