我有以下递归函数原型:
public void calcSim(Type<String> fort, Integer metric)
Integer metric = 0;
calcSim(fort, metric);
System.out.println("metric: " + metric);
}
我想打印公制的价值,如上所示。但它始终为零。现在,当我在函数末尾打印时,我得到一个有效的数字。
答案 0 :(得分:7)
在Java中没有通过引用传递的内容,抱歉:(
您的选项要么为方法提供返回值,要么使用可变包装器并随时设置值。使用AtmoicInteger导致它在JDK中,使你自己不担心线程安全当然会稍微快一些。
AtomicInteger metric = new AtomicInteger(0);
calcSim(fort, metric);
System.out.println("metric: " + metric.get());
然后在calcSim内部设置metric.set(int i);
答案 1 :(得分:4)
要获取通过引用传递的行为,您可以创建一个包装类,并在该类中设置值,例如:
class MyWrapper {
int value;
}
然后您可以将MyWrapper
传递给您的方法并更改值,例如:
public void calcSim(Type<String> fort, MyWrapper metric)
metric.value++;
System.out.println("metric: " + metric.value);
calcSim(fort, metric);
}
答案 2 :(得分:1)
Integer
是包装类。包装类是不可变的。因此,使用Integer
类型无法实现您的期望。
您可以在基元周围创建可变包装类,并更新对象以实现您想要的效果。
答案 3 :(得分:1)
两大问题:
您正在重新定义方法中同名的metric
。程序如何打印。它应该在编译时抱怨。
没有明确的退出条件。您的程序(方法)是否停止?
我认为你想要一些东西(伪代码,因为我不知道你在做什么):
public void calcSim(Type<String> fort, Integer metric)
if(condtion){
//print or return
}else{
//modify fort or metric so that it exits
calcSim(fort, metric); //call this with modified value
System.out.println("metric: " + metric.value);
}
}