java小白求问一个和rational number有关的问题

rational

 import java.math.BigInteger;

public class Rational {
 // Data fields for numerator and denominator
 private BigInteger numerator = BigInteger.ZERO;
 private BigInteger denominator = BigInteger.ONE;


 /** Construct a rational with default properties */
 public Rational() {
  this(BigInteger.ZERO, BigInteger.ONE);
 }

 /** Construct a rational with specified numerator and denominator */
 public Rational(BigInteger numerator, BigInteger denominator) {
     BigInteger gcd=new BigInteger(String.valueOf(gcd(numerator, denominator)));
     BigInteger r1=new BigInteger(String.valueOf(denominator.compareTo(BigInteger.ZERO)));
     this.numerator = (r1.multiply(numerator)).divide(gcd);
     this.denominator = (denominator.abs()).divide(gcd);
 }

 /** Find GCD of two numbers */
 private static long gcd(BigInteger n, BigInteger d) {
  BigInteger n1 = n.abs();
  BigInteger n2 = d.abs();
  int gcd = 1;

  for (int k = 1; (new BigInteger(String.valueOf(k))).compareTo(n1)<=0 && (new BigInteger(String.valueOf(k))).compareTo(n2)<=0; k++) {
   if (n1.mod(new BigInteger(String.valueOf(k))).equals(BigInteger.ZERO) && n2.mod(new BigInteger(String.valueOf(k))).equals(BigInteger.ZERO)) 
    gcd = k;
  }

  return gcd;
 }

 /** Return numerator */
 public BigInteger getNumerator() {
  return numerator;
 }

 /** Return denominator */
 public BigInteger getDenominator() {
  return denominator;
 }

 /** Add a rational number to this rational */
 public Rational add(Rational secondRational) {
  BigInteger n = numerator.multiply(secondRational.getDenominator()).add(denominator.multiply(secondRational.getNumerator()));
  BigInteger d = denominator.multiply(secondRational.getDenominator());
  return new Rational(n, d);
 }

 /** Subtract a rational number from this rational */
 public Rational subtract(Rational secondRational) {
     BigInteger n = (numerator.multiply(secondRational.getDenominator())).subtract(denominator.multiply(secondRational.getNumerator()));
     BigInteger d = denominator.multiply(secondRational.getDenominator());
  return new Rational(n, d);
 }

 /** Multiply a rational number to this rational */
 public Rational multiply(Rational secondRational) {
     BigInteger n = numerator.multiply(secondRational.getNumerator());
     BigInteger d = denominator.multiply(secondRational.getDenominator());
  return new Rational(n, d);
 }

 /** Divide a rational number from this rational */
 public Rational divide(Rational secondRational) {
     BigInteger n = numerator.multiply(secondRational.getDenominator());
     BigInteger d = denominator.multiply(secondRational.numerator);
  return new Rational(n, d);
 }

/** Compute the square of this rational number*/
 public Rational square() {
     BigInteger n = numerator.multiply(numerator);
     BigInteger d = denominator.multiply(denominator);
  return new Rational(n, d);
 }

/** toString */
 public String toString() {
      return numerator + "/" + denominator;
 }
}

testrational

 public static void main(String[]args){
        int y = 1;

        BigInteger i=new BigInteger(String.valueOf(1));
        BigInteger a=new BigInteger(String.valueOf(2));
        BigInteger b=new BigInteger(String.valueOf(3));
        BigInteger c=new BigInteger(String.valueOf(5));



        Rational r1 = new  Rational(i,a);
        Rational r2 = new  Rational(a,b);
        Rational r3 = new  Rational(a,c);


        Rational s1 = r3.multiply(r2);
        Rational s2 = r3.square();
        Rational s3 = r2.divide(r3);

        Rational r0 = new  Rational(b,b.add(i));
        do{

            r1 = r1.add(r0);
            b = b.add(a);
            y++;




        }while(y<49);
            System.out.println(r1.multiply(r1));
            System.out.println(s1);
            System.out.println(s2);
            System.out.println(s3);
            System.out.println(r0);
    }
}

这个程序的大概意思就是要在testRational里面计算1/2+3/4+...+99/100
求解为什么我的r0输出的结果为3/4,而不是期望的99/100
为什么循环没有正常的执行?

贴下代码吧 图片不好看呀