递归方法最大深度 - 静态变量

时间:2012-04-26 15:16:52

标签: java xml algorithm recurrence

我希望使用递归方法获取XML文件的最大深度,首先我声明了变量

 public static int maxdepth=0;

 private static void GetDepth(NodeList nl, int level,int maxdepth) {      

   level++;
   if (maxdepth<level)
   {
       maxdepth= level;
   }
    if(nl != null && nl.getLength() > 0){
        for (int i = 0; i < nl.getLength(); i++) {
            Node n = nl.item(i);
            if (n instanceof Element)
            {            
            GetDepth(n.getChildNodes(), level, maxdepth);
            }
        }

    }

}

 public static void main(String[] args) {
  NodeList nl = root.getChildNodes();
  GetDepth(nl,level,maxdepth);
  System.out.println(maxdepth);
 }

当我显示变量maxdepth的值时,我收到值0,作为声明

3 个答案:

答案 0 :(得分:4)

int maxdepth方法签名中的getDepth隐藏了静态变量maxdepth。从签名中删除它:

private static void GetDepth(NodeList nl, int level)

然后该方法将起作用。

答案 1 :(得分:2)

您可以使用XPath 2.0将其作为单行使用:

max(for $n in //* return count($n/ancestor::*))

即使在Java中,你也要比现在困难得多:

public int maxDepth(Node node) {
  int max = 0;
  NodeList kids = node.getChildNodes();
  if (kids.getLength() == 0) {
     return 0;
  }
  for (int i=0; i<kids.getLength(); i++) {
     int kidMax = maxDepth(kids.item(i);
     if (kidMax > max) max = kidMax;
  }
  return max + 1;
}

未经测试。

答案 2 :(得分:1)

在此代码部分:

if (maxdepth<level)
{
    maxdepth= level;
}

您正在更新局部变量maxdepth而不是静态变量。给其中一个变量赋一个不同的名称会使它工作,但由于该方法的maxdepth参数是不必要的,我只需删除它。