我想在最后调用recursive方法,一组带结果的整数中进行检索: {10,20,30}但在这个节目中我有问题,
public static void main(String[] args) {
HashMap<Integer, Set<Integer>> myMap = new HashMap();
myMap.put(1, new HashSet(){{add(10);}});
myMap.put(2, new HashSet(){{add(20);}});myMap.get(2).add(30);
myMap.put(3, new HashSet());
HashSet<Integer> setInteg = new HashSet();
recursivFonc(setInteg, myMap, 1);
System.out.println(setInteg);
}
static HashSet recursivFonc(HashSet<Integer> setInteg, HashMap<Integer, Set<Integer>> map, int cont)
{
System.out.println(cont);
if(map.get(cont) != null)
{
Set<Integer> set = map.get(cont);
for(Integer intg : set)
{
setInteg.add(intg);
return recursivFonc(setInteg, map, cont);
}
}
return setInteg;
}
我是怎么做到以{10,20,30}结束的一组?
答案 0 :(得分:4)
for循环中有一个return
语句。因此,for循环只迭代一次。相反,将return语句移到for循环之外。因此;循环将遍历集合的所有元素。
您可能还希望在每次递归调用时增加cont
。因为递归调用的退出点取决于map.get(cont)
是否为null。如果您从未更改cont
的值,则最初为1
。对方法的每次调用都将被传递1
并且它将持续很长时间(直到你失去记忆,我猜)。
static HashSet recursivFonc(HashSet<Integer> setInteg, HashMap<Integer, Set<Integer>> map, int cont)
{
System.out.println(cont);
if(map.get(cont) != null)
{
Set<Integer> set = map.get(cont);
for(Integer intg : set)
{
setInteg.add(intg);
}
return recursivFonc(setInteg, map, cont + 1);
}
return setInteg;
}