gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:45:42 26 4
gpt4 key购买 nike

尽管我的方法 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;
}

最佳答案

你的方法是递归的。 "check: " 行打印在该递归的每个级别上,并显示该级别当前具有的值。它首先打印“最内部”的值(4),然后是上面级别的值(也是 4),最后打印顶层的值,在 if 中递增后为 2 > 如上所述。它返回的值始终是顶级的值。

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

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

关于java - 为什么我的方法返回错误的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54871340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com