有理数实现的健壮性。在Rational的开发中使用断言来防止溢出。
根据算法-第四版-练习1.2.16解答修改如下方法:
public Rational plus(Rational b) { assert(den < Integer.MAX_VALUE && den > Integer.MIN_VALUE); assert(b.den < Integer.MAX_VALUE && b.den > Integer.MIN_VALUE); long d = den * b.den; long n = num * b.den + den * b.num; return new Rational(n, d); }
添加测试:
r1 = new Rational(1, 1000000000); r2 = new Rational(1, 1000000001); r = new Rational(1, 1000000002); System.out.println(r1.plus(r2).plus(r));
要使用断言生效,需要指定-ea参数,如果使用eclipse,则进行如下设置: