首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测圆属地

检测圆属地
EN

Stack Overflow用户
提问于 2017-11-28 13:43:16
回答 1查看 235关注 0票数 0

给定“场景”的依赖树,我正在计算每个场景分支的“权重”。

我需要检测循环依赖项(scenario1 -> scenario2 -> scenario3 -> scenario1)。

我目前正在进行广度优先搜索,并在递归链中传递一个列表,但是我无法检测到循环依赖项。

每次迭代,我都会将当前场景(字符串)添加到List中,然后检查dependsOnScenarios (一个场景名称数组)。

我应该只是检查字符串是否包含在string列表中,但是这个场景永远不会捕捉到它。

我是不是在错误的时间增加了/核对这个列表?

编辑:

allScenarios is: a ConcurrentHashMap<String, Scenario>

dependsOnScenariosString[],是Scenario的一个属性。

name是一个字符串,是Scenario的一个属性

getWeight最初是用空列表调用的:

s.priority = getWeight(s, new ArrayList<String>())+1;

输入:

代码语言:javascript
复制
Scenario g1=new Scenario("Scenario1" , null);
Scenario g2=new Scenario("Scenario2" , new String[]{"Scenario4"});
Scenario g3=new Scenario("Scenario3" , new String[]{"Scenario1","Scenario2"});
Scenario g4=new Scenario("Scenario4" , new String[]{"Scenario3"});

代码:

代码语言:javascript
复制
private static int getWeight(Scenario scenario, List<String> visited) throws Exception{
  int numDep = 0;         
  visited.add(scenario.name);  
  if(scenario.dependsOnScenarios != null){          
      for(String dependency:scenario.dependsOnScenarios) {
           if(visited.contains(dependency)){
                 throw new Exception("Circular Reference: "+dependency+" has already occured");
           }
           return scenario.dependsOnScenarios.length + getWeight(allScenarios.get(dependency),visited);
      }
  }
  return numDep;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-28 14:55:08

我的问题是,在评估和检查整个列表之前,我正在从循环中返回。我需要使用一个额外的循环来检查所有的内容。

代码语言:javascript
复制
private static int getWeight(Scenario scenario, List<String> visited) throws Exception{
  int numDep = 0;
  visited.add(scenario.name);
  if(scenario.dependsOnScenarios != null){
      for(String dependency:scenario.dependsOnScenarios) {
          if(visited.contains(dependency)){
             throw new Exception("Circular Reference: "+String.join("->",visited)+"->"+dependency);
          }
      }
      for(String dependency:scenario.dependsOnScenarios) {              
          return scenario.dependsOnScenarios.length + getWeight(allScenarios.get(dependency),visited);
      }
  }
  return numDep;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47533087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档