为什么我的方法返回错误的值?

时间:2019-02-25 17:11:25

标签: java return

即使我的方法 operationsNeeded 为我的return-int“ count1”打印了正确的值,它的下一行也向我的main方法返回了其他内容。我没有包括我的其余代码,如果需要的话,我很乐意提供。 例如,如果 operationsNeeded 被执行了4次,则 count1 在4上也被打印出来。但是由于我不知道的原因,System.out.println(“ check:” + count1);语句被执行4次,如下所示:
检查:4
检查:4
检查:3
检查:2

我希望程序仅执行一次,然后继续执行return语句。

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    int testcases = sc.nextInt();
    int count =0;
    while (count<testcases){
        int numberOfColleagues = sc.nextInt();
        sc.nextLine();
        String startPieces = sc.nextLine();

        int[] listOfcolleagues = listOfColleagues(numberOfColleagues, startPieces);

        int count2 = operationsNeeded(listOfcolleagues, 1);
        count++;
        System.out.println(count2);
    }

}

 public static int operationsNeeded (int[] listOfColleagues, int count1){
    //remove duplicates first
    ArrayList<Integer> relevantList=removeDuplicatesAndSort(listOfColleagues);
    System.out.println("relevantlist" + relevantList);
    //check for smallestdelta & index
    int [] deltaAndIndex = smallestDeltaHigherIndex(relevantList);
    int delta = deltaAndIndex[0];
    int index = deltaAndIndex[1];

    if (delta==1){
        for (int i=0;i<relevantList.size();i++){
            if (i!=index){
                relevantList.set(i,relevantList.get(i)+1);
            }

        }
    }
    if (delta>1 && delta<5){
        for (int i=0;i<relevantList.size();i++){
            if (i!=index){
                relevantList.set(i,relevantList.get(i)+2);
            }
        }
    }
    if (delta>4){
        for (int i=0;i<relevantList.size();i++){
            if (i!=index){
                relevantList.set(i,relevantList.get(i)+5);
            }
        }
    }

    System.out.println(count1);
    int[] updatedList = new int[relevantList.size()];
    for (int i=0; i<relevantList.size();i++){
        updatedList[i]=relevantList.get(i);
    }
    if (!isAllTheSame(relevantList)) {
        count1 +=1;
        operationsNeeded(updatedList,count1);
    }

        System.out.println("check: " + count1);

 return count1;
}

1 个答案:

答案 0 :(得分:1)

您的方法是递归的。 "check: "行将在该递归的每个级别上打印,并带有该级别当前具有的值。它首先打印“最内层”值(4),而不是上层(也是4)的值,最后是最上层的值,该值在上面的if中递增后为2。 returns的值始终是从上到下的值。

如果只打印一次,则可以使用else仅在最内层打印。但是,这仍然return来自顶级迭代的值;相反,请跟踪从递归调用返回的值,并相应地更新count1

if (! isAllTheSame(relevantList)) {
    // we have to go deeper!
    count1 = operationsNeeded(updatedList, count1 + 1);
} else {
    // phew, finally done
    System.out.println("check: " + count1);
}