有理数类设计
仿照BigDecimal类以面向对象的方式设计有理数类。
-
给出你的有理数类的代码。
package rational; public class Rational { private int Numerator;//分子 private int Denominator;//分母 public Rational(int Numerator, int Denominator) { //构造函数 this.Numerator=Numerator; this.Denominator=Denominator; } public int getNumerator() { //获取分子 return Numerator; } public void setNumerator(int numerator) { Numerator = numerator; } public int getDenominator() { //获取分母 return Denominator; } public void setDenominator(int denominator) { Denominator = denominator; } public Rational addition(Rational X) { //加法 int a=this.Numerator*X.Denominator+X.Numerator*this.Denominator; int b=this.Denominator*X.Denominator; return new Rational(a,b); } public Rational subtraction(Rational X) { //减法 int a=this.Numerator*X.Denominator-X.Numerator*this.Denominator; int b=this.Denominator*X.Denominator; return new Rational(a,b); } public Rational multiplication(Rational X) { //乘法 int a=this.Numerator*X.Numerator; int b=this.Denominator*X.Denominator; return new Rational(a,b); } public Rational division(Rational X) { //除法 int a=this.Numerator*X.Denominator; int b=this.Denominator*X.Numerator; return new Rational(a,b); } public int compareTo(Rational X) { //比较大小 if(this.subtraction(X).getNumerator()>0) return 1;//大于 else if(this.subtraction( X).getNumerator()==0) return 0;//等于 else return -1;//小于 } public String toString() { //转换成String型,输出Rational类默认转换为该型 if(this.Denominator==1) return this.Numerator+" "; else return this.Numerator+"/"+this.Denominator; } public double doubleValue() { //转换成double型 return 1.0*this.Numerator/this.Denominator; } public int intValue() { //转换成int型 return (int)doubleValue(); } public long longValue() { //转换成long型 return (long)doubleValue(); } }
-
给出你的测试代码。要在与有理数类不同包的其他类中调用有理数类。
import java.util.Scanner; import rational.Rational; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("输入两个数字构成有理数分数"); Rational a = new Rational(in.nextInt(), in.nextInt()); System.out.println("输入两个数字构成有理数分数"); Rational b = new Rational(in.nextInt(), in.nextInt()); System.out.println("两个有理数相加结果"); System.out.println(a.addition(b)); System.out.println("两个有理数相减结果"); System.out.println(a.subtraction(b)); System.out.println("两个有理数相乘结果"); System.out.println(a.multiplication(b)); System.out.println("两个有理数相除结果"); System.out.println(a.division(b)); System.out.println("比较两个有理数大小结果:大于输出1,等于输出0,小于输出-1"); System.out.println(a.compareTo(b)); System.out.println("将第一个有理数转换成字符串型"); System.out.println(a.toString()); System.out.println("将第一个有理数转换成double型"); System.out.println(a.doubleValue()); System.out.println("将第一个有理数转换成int型"); System.out.println(a.intValue()); System.out.println("将第一个有理数转换成long型"); System.out.println(a.longValue()); } }
-
尝试描述怎么与c语言的有理数代码相比较,为什么你设计的类更加面向对象? c语言代码是依据于函数的,主要是通过过程来实现,类将功能以方法形式写出,而在使用时将类导入即可,更加方便
-
尝试从代码复用的角度来描述你设计的有理数类。从几个方面讨论。
-
别人如何复用你的代码 ? 导入rational包
-
别人的代码是否依赖你的有理数类的属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?是的,有理数属性更改在一定程度上会影响调用我有理数的除了public类的代码。
-
有理数类的public方法是否设置合适?为什么有的方法设置为private? 有些属性不想被他人访问可以设置为private类