当前位置: 代码迷 >> 综合 >> 关于“如何检测节点网络中是否存在闭环之java实现”的程序bug修复
  详细解决方案

关于“如何检测节点网络中是否存在闭环之java实现”的程序bug修复

热度:60   发布时间:2024-01-20 16:54:43.0

之前由于编码过程中没有考虑到节点信息异常(节点关系节点包含自身)对函数本身结果的影响,因此之前的函数在运行期间可能由于本身网络节点的信息异常导致返回结果错误,在这里增加了如下的解决方案:

节点关系节点包含自身(异常信息:在nodeA的relList里面包含nodeA)

nodeB nodec nodec

nodeName ndoeA
relList
nodeB
nodeC
nodeA
curRelIndex -1
beforeNdoe null


请大家在“如何检测节点网络中是否存在闭环之java实现”代码片段的122行增加如下代码段

          /*** 如果不是起始"视野",但是nextNode和curNode相同的,* 说明在一个节点上可能存在包含自身的关系,这样的数据是异常数据* 顺序不可调整至调用head()和back()的语句前面*/if(nodeName.get("curNode").equals(nodeName.get("nextNode")) &&!nodeName.get("curNode").equals(nodeName.get("beforeNode"))){int curRelIndex = (Integer) nodeCollections.get(nodeName.get("curNode")).get("curRelIndex") ;throw new Exception("节点参数异常:节点" + nodeName.get("curNode")+"的关系节点不能包含自身,在relList的第"+ (curRelIndex + 1)+"元素上");}


本次修改增加了对节点关系节点包含自身的校验,如果节点关系节点包含自身,抛出节点信息异常。

不过由于起点选取的随机性,对这种异常的检验并不是严格的,即遍历到了那个节点的那个关系才能检测到,若在检测到这种异常之前就已经发现存在闭环,则程序运行完毕,这种参数异常将会被忽略。因此,也可以说对于不存在闭环的网络中,对这种数据异常的检测是严格的,但是在存在闭环的网络中是不严格的。
虽然这种校验时不严格的,不具有确定性,反正给人不太靠谱的感觉;但是我认为这种校验时最节省资源的。节点异常信息的校验并不是本函数的初衷,本次增加的校验只是确保函数的运算结果符合预期,不至于被节点异常信息的干扰而发生错误。所以本函数完全没有必要因为实现对节点异常信息的校验而大大增加开销。