关于如何使用递归方法计算列表中元素的数量,然后跳转到该列表中的每个元素并计算它们存储的元素数量,我遇到了一个小问题。我将尝试尽可能地概括这一点,但我将使用我自己的一个例子。 我拥有的数据结构是一个arraylist,我存储了元素。所有这些都有一个arraylist,其中指向此元素的元素由前面的元素ID存储。所以:Element-> List-> ID(整数,即2) - >元素nr.2。我想通过递归方法计算每个元素的前面元素数量。我尝试了几个选项,比如将所有前面的元素存储在一个新列表中,然后将其大小作为前面元素的数量,以及使用counter-int。到目前为止我最接近的是使用这种方法(id是一个数字,总是+1它在包含它的arraylist中的索引):
private int getPredecessorCount(int id){
for(int i:elementList[id-1].predecessors){
return 1+getPredecessorCount(i);
}
return 0;
}
这给了我所有元素的正确答案,其中元素包含仅包含单个元素的列表。我无法使用具有超过1个前置元素的列表的元素。有任何想法吗?
我也尝试过:
private int getPredecessorCount(int id, int counter) {
if(!elementList[id-1].predecessors.isEmpty()){
for(int i : elementList[id-1].predecessors){
counter+=getPredecessorCount(i, counter);
counter++;
}
}
return counter;
这给了我与前一个相同的结果,但是前一个给了我太少的前辈用于包含更大列表的那些,这个给了我太多了。
答案 0 :(得分:0)
好的,请概括一下......
private int counter(List<Element> items) {
int count = 0;
for (Element item: items) {
count ++; // for the item counting
if (item.holdsElements) { // for inner elements
count = count + counter(item.getElements());
}
}
return count;
}
我故意写了这个方法的简化版本来说明应该如何做。有目的地忽略空检查和其他边缘情况。
所以你计算一个列表中的所有元素......好简单,如果一个元素包含内部项,你就去计算它们。然后返回绝对计数。
你的问题是你从第一个元素得到计数后返回结果,而没有考虑其他元素。使用调试器可以很容易地发现问题。