private boolean checkForNameAndAmbigousInfo(final Attribute<NonSpatialObject> od,
final Attribute<NonSpatialObject> od1) {
if (isNameMatching(od, od1, getModel().FEATURES.SignpostInfo.OtherDestination)
&& (isAmbigous(od) && isAmbigous(od1)))
return true;
if (isNameMatching(od, od1, getModel().FEATURES.SignpostInfo.OtherDestination)
&& (!isAmbigous(od) && !isAmbigous(od1)))
return true;
if (isNameMatching(od, od1, getModel().FEATURES.SignpostInfo.OtherDestination)
&& (isAmbigous(od) && !isAmbigous(od1)))
return true;
if (isNameMatching(od, od1, getModel().FEATURES.SignpostInfo.OtherDestination)
&& (!isAmbigous(od) && isAmbigous(od1)))
return true;
return false;
}
private boolean isAmbigous(final Attribute<NonSpatialObject> currSignInfo) {
final DictionaryRangeItem ambiAttribute =
getToolkit().getDictionaryTools().getDictionaryRangeItemFromComposite(currSignInfo,
getModel().FEATURES.SignpostInfo.AmbiguousInfo);
return ambiAttribute.equals(getModel().RANGES.AmbiguousInfo.Ambiguous);
}
该方法存在声纳线问题,其圈复杂度为13,大于10
授权,我现在该怎么办.
2条答案
按热度按时间j8ag8udp1#
如果名称匹配没有副作用:
条件的第二部分看起来像是一个bug。“如果两个都不含糊就返回真”?看起来是错误的。
大概可以吧
2wnc66cl2#
第一个操作数总是相同的,然后测试
A&B
、!A&!B
、A&!B
和!A&B
,在所有情况下都返回true。我认为您的代码可能会缩减为return isNameMatching(od, od1, …)
(因为对于至少一个条件,不明确的调用总是返回true
)。在数学逻辑中,这称为tautology(总是正确的陈述)。(当然,考虑到
isNameMatching
是幂等的,并且您的方法都没有副作用)。你自己如何得出这个结论呢?提取变量并转换为单个布尔表达式可能会有所帮助:
正如您所看到的,至少有一个不明确的检查必须为真(您正在检查所有四种可能性:TT、TF、FT、FF),如果至少有一个或表达式为真,则最终结果只能是
nameMatching && true
,可以进一步简化为简单的nameMatching
。如果你不确定关于或表达式的推理,可以提取出常用术语:
现在应该很清楚,结果只能等价于
return nameMatching;
。