0

我想使用递归方法获得 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,作为声明

4

3 回答 3

4

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

private static void GetDepth(NodeList nl, int level)

那么该方法将起作用。

于 2012-04-26T15:19:05.037 回答
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;
}

未测试。

于 2012-04-26T21:52:05.077 回答
1

在此代码部分:

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

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

于 2012-04-26T15:29:12.037 回答