您不能在带有参数的函数中编辑双精度吗?



这到底有什么问题?

    public void changeElement(String isAdd, double Element, int timesBy, int lowCap) {
    ran = Math.floor(Math.random()*timesBy)+lowCap;
    if(isAdd == "+"){
        if((Element + ran) > 100){
            ran -= ((Element + ran)-100);
        };
        Element += ran;
    }else{
        if((Element - ran) < 0){
            ran -= (ran - Element); 
        };
        Element -= ran;
    };
    Elementi = (int)Element;
    ranI = (int)ran;
}

我知道数学有效,因为我将"Element"标签更改为我一直使用的双精度,那么为什么它没有像它想要的那样更改真正的双精度。

我想你的意思是它不会改变你传递给参数的值?

如果是这样的话,Java是pass by value而不是pass by reference

换句话说,传递的不是

将参数的引用传递给方法,而是传递参数的副本。您的方法更改了副本,但一旦该方法结束,副本就会超出范围并被垃圾回收。

那么解决方案是什么?

将方法签名更改为double并返回 Element。然后在调用函数时将 Element 设置为返回值。

也请阅读此相关答案。

最新更新