gpt4 book ai didi

java - 返回无效引用参数值

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:57:59 24 4
gpt4 key购买 nike

我编写这段代码的目的是在每次调用 recurse() 时递增链。但是,每次 recurse() 返回时,它都会这样做(根据我在调试器中看到的情况);它会递减 b 的值。如果您想了解我正在尝试做的事情的背景,这是欧拉项目 #14。

http://projecteuler.net/problem=14

private static void euler14()
{
int currentstart=1000000;
int longest = 0;
int current=0;
Integer chain=0;
for(int i = currentstart; i>0; i--)
{
recurse(i,chain);
if(chain > current)
{
current=chain;
longest=i;
}
chain = 0;
}
System.out.print("Euler 14: " + longest + "\n");
}

private static void recurse(int a, Integer b)
{
b++;
if(a==1)
{
return;
}
else if(a%2==0)
{
recurse((a/2), b);
}
else if(a%2==1)
{
recurse(((a*3)+1), b);
}
return;

}

最佳答案

虽然对 Integer 的引用被(按值)传递给 recurse,但对象本身是不可变的。当您执行 b++ 时,增加的值将分配给 b,它是 recurse 的本地值。一旦您返回,该值就会返回到调用方中 b 的未更改副本。

您可以将b 设为static int 变量,并将其从recurse 的参数列表中删除以解决问题:

private static int b = 0;
private static void recurse(int a) {
b++;
if(a==1) {
return;
}
if(a%2==0) {
recurse((a/2), b);
} else if(a%2==1) {
recurse(((a*3)+1), b);
}
}

关于java - 返回无效引用参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14057285/

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