gpt4 book ai didi

java - 使用递归方法通过控制流中断 Java 循环的迭代

转载 作者:行者123 更新时间:2023-12-01 21:08:24 29 4
gpt4 key购买 nike

我尝试通过递归来解决猴子/椰子/水手问题。

我的 for 循环停止遇到问题。它只是迭代,但我不确定我哪里出错了。

在我的 3 个测试用例中,testCoconuts 方法返回我想要的值,但是我的循环将迭代直到最后一个数字,即使真实值是通过循环发送的。

我确定这是我的 boolean 值,但我无法弄清楚我做错了什么。

public class Test {

public static boolean testCoconuts(int s, int sr, int c){

if (c % s == 1 && sr > 0) {
Test.testCoconuts(s, sr - 1, c - (c/s) - 1);
}
else if (c % s != 1) {
return false;
}
else if (sr == 0) {
System.out.println("solved");
return true; //returns true in all 3 test cases below
}

return false;
}


public static void main(String[] args) {
//int s and sr must me entered into the test program
//as the same number, ex s= 2, sr = 2

int sailors = 3;

Test.testCoconuts(2, 2, 7); //will print solved
Test.testCoconuts(3, 3, 79); //will print solved
Test.testCoconuts(4,4,1021); //will print solved

for (int testNuts = 1; testNuts < 100; testNuts++) {
if (Test.testCoconuts(sailors, sailors, testNuts)==true) {
System.out.println("solved!");
break;
}
else {
System.out.println(testNuts);
System.out.println("next iteration");
System.out.println(testNuts);
}
}
}
}

最佳答案

for 循环将一直运行,直到 testCoconouts 方法等于 true。

现在,如果您看一下该方法,有四种可能的结果:

  • if (c % s == 1 && sr > 0)
  • else if (c % s != 1)
  • else if (sr == 0)
  • 以上均不满足

但是,只有在最后三个中您才明确说明该方法应返回什么值。

因此,在第一个结果中,由于没有提及其他内容,因此该方法将始终返回 false,如 if 语句之外所述。我假设您想返回递归本身的结果,对吗?

尝试像这样更改第一个 if 语句,看看会发生什么:)

    if (c % s == 1 && sr > 0) {
boolean result = Test.testCoconuts(s, sr - 1, c - (c/s) - 1);
return result;
}

(可以在没有变量 result 的情况下在一行中完成,但为了清楚起见,我将其分开)

关于java - 使用递归方法通过控制流中断 Java 循环的迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840269/

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