【问题标题】:Function is calling itself multiple times [closed]函数多次调用自身[关闭]
【发布时间】:2017-07-28 13:32:06
【问题描述】:

我编写了一个函数,它调用自身的次数比它应该调用的次数多 3 倍。我在我的程序中调用它一次,但它总共执行了 4 次。谁能解释我的问题?

 public static String[] MainBooker(Document doc, int counter){
            System.out.println("test");
            Queue<String> mainbooker = new LinkedList<String>();
            Elements span = doc.select("td");
            for(int i = counter+1 ; i < counter +21; i++){
                String inf = span.eq(i).text();
                if(counter%2 == 0 && i%2 == 0){
                    if(!inf.equals("")){
                        if(inf.contains("'"))
                            inf = inf.replaceAll("'", "\'");
                        mainbooker.add(inf);
                    }
                }
                else if(counter%2 != 0 && i%2 != 0){
                    if(!inf.equals("")){
                        if(inf.contains("'"))
                            inf = inf.replaceAll("'", "\'");
                        mainbooker.add(inf);
                    }
                }
            }         

            String[] mainbooker_info = new String[mainbooker.size()];

            int i = 0;
            for (String info : mainbooker) {
                mainbooker_info[i] = info;
                writeToFile(mainbooker_info[i]);
                i++;
            }  
            //Stack:
            //M/V || firstname || middleName || lastName || DoB 
            // Zipcode+ number || street || country || phonenumber || email
            return mainbooker_info;
    }

我在 if 语句中调用它:

else if(inf.contains("Main booker") ||  inf.contains("Haupt-Bucher") || inf.contains("Hoofdboeker")){  
                String[] result = MainBooker(doc, i);  
                if(!result[2].equals("-")){              
                    informationBasic.add(result[1] +" "+result[2]+ " "+ result[3]);
                }
                else if(result[2].equals("-")){
                    informationBasic.add(result[1] + " "+ result[3]);
                }
                mainbooker.addAll(Arrays.asList(MainBooker(doc, i)));
            }

【问题讨论】:

  • 递归问题......让我们看看
  • 您应该遵守约定并从小写设置函数名称
  • 请详细解释您的意思。哪个函数在调用自己,这到底是什么意思?在您发布的代码中,没有调用自身的函数。
  • 听起来问题出在调用代码中……你还没有发布。
  • 方法根本没有调用它自己——你的other方法调用了它4次。它被多次调用,因为......你多次调用它。

标签: java


【解决方案1】:

在您的代码中,

else if(inf.contains("Main booker") ||  inf.contains("Haupt-Bucher") || inf.contains("Hoofdboeker")){  
            if(!MainBooker(doc, i)[2].equals("-")){              
                informationBasic.add(MainBooker(doc, i)[1] +" "+MainBooker(doc, i)[2]+ " "+ MainBooker(doc, i)[3]);
            }
            else if(MainBooker(doc, i)[2].equals("-")){
                informationBasic.add(MainBooker(doc, i)[1] + " "+ MainBooker(doc, i)[3]);
            }
            mainbooker.addAll(Arrays.asList(MainBooker(doc, i)));
        }

MainBooker 已被多次调用。试试这个:

else if(inf.contains("Main booker") ||  inf.contains("Haupt-Bucher") || inf.contains("Hoofdboeker")){
String[] result = MainBooker(doc, i);  
if(!result[2].equals("-")){              
    informationBasic.add(result[1] +" "+result[2]+ " "+ result[3]);
}
else if(result[2].equals("-")){
    informationBasic.add(result[1] + " "+ result[3]);
}
mainbooker.addAll(Arrays.asList(result));}

【讨论】:

  • 谢谢,但它现在打印两次而不是四次。
  • 可以上传更新的代码吗?
  • 我有更新,感谢您的回复
  • 而不是 mainbooker.addAll(Arrays.asList(MainBooker(doc, i)));,使用这个:mainbooker.addAll(Arrays.asList(result));
  • @wolteeer Chinmayjain 是正确的 - 请将mainbooker.addAll(Arrays.asList(MainBooker(doc, i))); 替换为此答案中显示的相应行。
猜你喜欢
  • 1970-01-01
  • 2011-09-19
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多