即使我的方法 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;
}
答案 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);
}