变量更改值而不在代码中更改它

Variable changing value without changing it in the code

我正在为像 BigInteger 这样的大数字开发自定义数字 class。我必须创建这个方法,它可以找到给定数字的质因数分解。问题在于那个方法,当我分配一个数字的当前值并且它没有很快找到因式分解时(比如在 2 或 3 次迭代之后),该值意外改变。这是代码

    public ArrayList<String> factors(){
    ArrayList<String> pList = new ArrayList<>();
    FedNumbers in = this;
    FedNumbers d = new FedNumbers("2");
    FedNumbers zero = new FedNumbers("0");
    FedNumbers squared = d.product(d);
    while(d.compareTo(in)<=0){
        System.out.println(in);
        if(in.divideR(d).compareTo(zero)==0){

            pList.add(d.toString());


            in=in.divideQ(d);


        }
        else{
            d.inc();
            squared=d.product(d);
        }
    }
    pList.add(in.toString());

    return pList;

}

divideQ 是一种将returns 系数除以returns 其余数的R 的方法。平方变量的存在是因为我可以在 sqrt(n) 之前找到它的因式分解。乘积将两个值相乘,returns 结果。

这是开头为 161 的输出:

161 161 151 141 141 131 121 121 111 111 111 101 [1]

它从未进入迭代,我单独在测试仪中尝试了使用残差和 compareTo 的除法并且它有效,无法理解为什么在两次迭代后 in 值突然无缘无故地变化。

这是我要分解的 in 值或当前值,许多其他数字也会发生同样的事情,每次我检查它时,只有 in 值随机变化。当我除法和使用 divideQ 或 divideR 分开或相乘时,它总是完美地工作。预先感谢您的帮助

我认为你问题的根源在这里:

FedNumbers in = this;

我可能是错的,但您是否认为此 copies 当前对象,即您为其调用 factors() 的对象,创建 in 作为新对象?

事实并非如此。复制一个引用只是建立另一个对同一对象的引用。在整个 factorsthisin 中指的是同一个对象。

在您的代码中添加复制构造函数应该不会太困难。