变量更改值而不在代码中更改它
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
作为新对象?
事实并非如此。复制一个引用只是建立另一个对同一对象的引用。在整个 factors
、this
和 in
中指的是同一个对象。
在您的代码中添加复制构造函数应该不会太困难。
我正在为像 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
作为新对象?
事实并非如此。复制一个引用只是建立另一个对同一对象的引用。在整个 factors
、this
和 in
中指的是同一个对象。
在您的代码中添加复制构造函数应该不会太困难。