0
我想实现Euclid的扩展算法,并且我必须在这里产生多个值,现在下面的代码不显示正确的x和y值。我在跟着科伦。实现返回多个值的euclid的扩展算法不正确的结果
package algorithms;
import java.util.*;
import java.util.regex.*;
import java.text.*;
import java.math.*;
import java.awt.geom.*;
public class Euclid {
private int x;
private int y;
private int d;
public static int gcd(int a, int b)
{
if(b == 0)
return a;
else return gcd(b,a%b);
}
public Euclid gcdExtend(Euclid e, int a, int b)
{
if(b == 0)
{
this.d = a;
this.x = 1;
this.y = 0;
return this;
}
Euclid e1 = gcdExtend(this,b,a%b);
Euclid e2 = new Euclid();
this.d = e1.d;//line1
this.x= e1.y;//line2
this.y = e1.x - ((int)Math.floor((a/b)))*e1.y;//line3
return this;//line 4
}
public static void main(String[] args){
Scanner input = new Scanner(System.in);
Euclid e = new Euclid();
e = e.gcdExtend(e,28,12);
System.out.println("d = "+ e.d+" x = "+ e.x+" y = "+ e.y);
}
}
但是,当我用下面的行替换行1,2,3,4(在代码中注释),它的工作原理绝对好。我在这里错过了哪个OOP概念,我的意思是为什么afetr修改它工作正常?为什么需要创建并返回一个新对象?
e2.d = e1.d;//line1
e2.x= e1.y;//line2
e2.y = e1.x - ((int)Math.floor((a/b)))*e1.y;//line3
return e2;//line 4