Java 变量更改值而不更改代码中的值

Java 变量更改值而不更改代码中的值,java,variables,biginteger,division,Java,Variables,Biginteger,Division,我正在为像BigInteger这样的大数字开发一个自定义的数值类。我必须创建这个方法,在这里它可以找到给定数字的素因式分解。问题在于这种方法,当我分配一个数字的当前值时,它没有很快找到一个因式分解(比如在2或3次迭代之后),值会意外地改变。这是密码 public ArrayList<String> factors(){ ArrayList<String> pList = new ArrayList<>(); FedNumbers in

我正在为像BigInteger这样的大数字开发一个自定义的数值类。我必须创建这个方法,在这里它可以找到给定数字的素因式分解。问题在于这种方法,当我分配一个数字的当前值时,它没有很快找到一个因式分解(比如在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;

}
public ArrayList factors(){
ArrayList pList=新的ArrayList();
FedNumbers in=此;
FedNumbers d=新的FedNumbers(“2”);
FedNumbers零=新的FedNumbers(“0”);
FedNumbers平方=d.乘积(d);

我认为你问题的根源在于:

FedNumbers in = this;
我可能错了,但您是否认为此
复制了当前对象,即您为其调用
factors()
,在
中创建
作为新对象

事实并非如此。复制引用只会建立对同一对象的另一个引用。在整个
过程中,
中的
引用同一对象


向代码中添加副本构造函数应该不会太困难。

我认为问题的根源在于:

FedNumbers in = this;
我可能错了,但您是否认为此
复制了当前对象,即您为其调用
factors()
,在
中创建
作为新对象

事实并非如此。复制引用只会建立对同一对象的另一个引用。在整个
过程中,
中的
引用同一对象



向代码中添加副本构造函数应该不会太困难。

您没有发布FedNumbers
,但您提到它类似于
biginger
;它是不可变的吗?现在将它更改为non-inmutable,仍然保持不变“随机更改”的值是什么?您肯定是在重新分配。另外,如果FedNumbers是不可变的,那么至少,像
d.inc()
这样的事情应该做吗?为什么输出令人惊讶?行
in=in.divideQ(d)
将变量
in
重新分配给divideQ的结果,并且您正在打印的输出是
System.out.println(in)
,因此我希望在遵循
的第一个分支时,每隔几次迭代就会看到打印的值发生变化。例如,in值,我想知道161的因子,它们是7 23和1,它应该在那里,但它会在7之后不断询问,比如161从2:6开始,但它并没有保持这样的变化151的第二次迭代完全没有理由,当我调试它时,它仍然显示为161,我不知道发生了什么。你没有发布FedNumbers
,但你提到它像
biginger
;它是不可变的吗?现在将它改为non-inmutable,仍然保持不变“随机更改”的值是什么?你肯定是登录。另外,如果FedNumbers是不可变的,那么像
d.inc()
这样的事情应该做什么?为什么输出令人惊讶?行
in=in.divideQ(d)
将变量
in
重新分配给divideQ的结果,并且您正在打印的输出是
System.out.println(in)
,因此我希望在遵循
的第一个分支时,每隔几次迭代就会看到打印的值发生变化。例如,in值,我想知道161的因子,它们是7 23和1,它应该在那里,但它会在7之后不断询问,比如161从2:6开始,但它并没有保持这样的变化151的第二次迭代完全没有理由,当我调试它时,它仍然显示为161,我不知道发生了什么。我使用toString方法在中初始化,就像它是一个新对象一样,比如新的FedNumbers(this.toString())有效地初始化了一个新的,但问题仍然存在。我隔离了问题,并验证了它只在我用d.inc()或d.sum(一)递增变量d时发生in值开始随机下降如果你想得到比随机提示更好的帮助,那么就没有办法发布FedNumbers的代码,至少到目前为止,methods inc和sum可以完全阅读和理解。发现问题要感谢大家,这就是你说的,我开始用toString()来引用新的FedNumbers它成功了,谢谢。您可能仍然需要研究一个复制构造函数,它肯定比内部到字符串到内部迂回更有效。我使用toString方法在中进行初始化,就像它是一个新对象一样,比如新的FedNumbers(this.toString())有效地初始化了一个新的,但问题仍然存在。我隔离了问题,并验证了它只在我用d.inc()或d.sum(一)递增变量d时发生in值开始随机下降如果你想得到比随机提示更好的帮助,那么就没有办法发布FedNumbers的代码,至少到目前为止,methods inc和sum可以完全阅读和理解。发现问题要感谢大家,这就是你说的,我开始用toString()来引用新的FedNumbers它成功了,thanksGood。您可能仍然需要研究复制构造函数,这肯定比内部到字符串到内部的迂回更有效。