gpt4 book ai didi

java - 测量圈复杂度

转载 作者:行者123 更新时间:2023-12-01 09:18:39 25 4
gpt4 key购买 nike

下面的代码采用格式为 {Package1: Dependency, Package2: Dependency} 的包名称和依赖项数组,并将它们放入要返回的 HashMap 中。根据我的面试官的说法,该方法的圈复杂度为 12,这太高了,无法接受。然而,我对代码进行了度量,报告复杂度实际上是 2。

有人可以告诉我为什么复杂度会如此之高以及如何简化它以降低圈复杂度?我在这里不知所措。

public static HashMap<String, String> parseDependencies(String[] args) {
HashMap<String, String> pairs = new HashMap<String, String>();
for (int i = 0; i < args.length; i++) {
if (!args[i].contains(": ") || args[i].startsWith(": ")) {
logger.log(Level.WARNING, ENTRY + args[i] + FORMATTING);
continue;
}
String[] entry = args[i].split(": ");
if (entry.length < 2) {
pairs.put(entry[0], null);
} else {
pairs.put(entry[0], entry[1]);
}
}
return pairs;
}

最佳答案

不同的工具计算圈复杂度略有不同。我不知道面试是如何得出12的。或者你是如何得出2的。粗略地说,圈复杂度计算条件、循环和控制流语句的数量。你有一个循环,3个条件,一个continue , else , return ,得出 7,看起来差不多。

我认为该实现并不“复杂”,但它存在许多问题:

  • 返回类型应为接口(interface),Map<String, String>而不是HashMap
  • 应使用 for-each 循环而不是计数循环
  • entry.length 的条件如果将第二个参数-1添加到split,则可以消除。这样,由于 args[i].contains(": ") 上的早期条件和 continue接下来,entry.length将保证至少为 2。
  • 重复 :不太好。

在这个特定的例子中,我更担心这些事情而不是圈复杂度。

最后,降低圈复杂度的常用技术是将代码提取到辅助方法中。例如,复杂的 boolean 条件,甚至整个循环体。

关于java - 测量圈复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40326559/

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