华中科技大学文华学院《Java程序设计》实验报告实验三:有理数的类封装专业班级:通信工程2008级1班姓名:学号:时间:实验三:有理数的类封装1、实验目的:让学生学习使用类来封装对象的属性和功能。
2、实验要求:希望程序能对分数(分子分母都是整数)进行四则运算,而且两个分数四则运算的结果仍然是分数。
分数也称有理数。
本实验要求用类实现对有理数的封装。
有理数有两个重要的成员:分子和分母,另外还有重要的四则运算。
编写一个java应用程序,该程序中有一个Rational(有理数)类,具体要求如下:※Rational类有两个int型的成员变量,名字分别为numberator(分子)和denominator(分母)。
※提供Rational add(Rational r)方法,即有理数调用该方法与参数指定的有理数做加法运算,并返回一个Rational对象。
※提供Rational sub(Rational r)方法,即有理数调用该方法与参数指定的有理数做减法运算,并返回一个Rational对象。
※提供Rational muti(Rational r)方法,即有理数调用该方法与参数指定的有理数做乘法运算,并返回一个Rational对象。
※提供Rational div(Rational r)方法,即有理数调用该方法与参数指定的有理数做除法运算,并返回一个Rational对象。
3、程序效果图4、程序代码(主要语句有注释!)5、实验思考问题实验内容回答评语在Computer.java增加计算有理数除法的代码在Computer.java增加计算1+3/2+5/3+8/5+13/8…前20项和的代码6、实验总结及心得附录:程序摸版Rational.javapublic class Rational {int numerator,denominator;Rational(){}Rational(int a,int b){setNumeratorAndDenominator(a,b);}void setNumeratorAndDenominator(int a,int b){ //设置分子和分母int c=f(Math.abs(a),Math.abs(b)); //计算最大公约数numerator=a/c;denominator=b/c;if(numerator<0&&denominator<0){numerator=-numerator;denominator=-denominator;}}int getNumerator() {return numerator;}int getDenominator() {return denominator;}int f(int a,int b){ //求a和b的最大公约数if(a<b){int c=a;a=b;b=c;}int r=a%b;while(r!=0){a=b;b=r;r=a%b;}return b;}Rational add(Rational r) {int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*b+denominator*a;int newDenominator=denominator*b;Rational result=new Rational(newNumerator,newDenominator);return result;}Rational sub(Rational r) {int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*b-denominator*a;int newDenominator=denominator*b;Rational result=new Rational(newNumerator,newDenominator);return result;}Rational muti(Rational r) {int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*a;int newDenominator=denominator*b;Rational result=new Rational(newNumerator,newDenominator);return result;}Rational div(Rational r) {int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*b;int newDenominator=denominator*a;Rational result=new Rational(newNumerator,newDenominator);return result;}}Computer.javapublic class Computer {public static void main(String args[]) {Rational r1;【代码1】//创建分子、分母分别为1和5的有理数r1Rational r2;【代码2】//创建分子、分母分别为3和2的有理数r2Rational result=【代码3】//r1调用方法和r2做加法运算int a=【代码4】// result调用方法返回自己的分子int b=【代码5】// result调用方法返回自己的分母double p=a;double q=b;double doubleResult=p/q;System.out.print("分数"+r1.getNumerator()+"/"+r1.getDenominator());System.out.print("与分数"+r2.getNumerator()+"/"+r2.getDenominator()+"的和等于");System.out.println(a+"/"+b+"="+doubleResult);r1.setNumeratorAndDenominator(4,7);r2.setNumeratorAndDenominator(-5,20);result=r1.muti(r2);a=result.getNumerator();b=result.getDenominator();p=a;q=b;doubleResult=p/q;System.out.print("分数"+r1.getNumerator()+"/"+r1.getDenominator());System.out.print("与分数"+r2.getNumerator()+"/"+r2.getDenominator()+"的积等于");System.out.println(a+"/"+b+"="+doubleResult);}}答案代码Rational.javapublic class Rational {int numerator,denominator;Rational(){}Rational(int a,int b){setNumeratorAndDenominator(a,b);}void setNumeratorAndDenominator(int a,int b){ //设置分子和分母int c=f(Math.abs(a),Math.abs(b)); //计算最大公约数numerator=a/c;denominator=b/c;if(numerator<0&&denominator<0){numerator=-numerator;denominator=-denominator;}}int getNumerator() {return numerator;}int getDenominator() {return denominator;}int f(int a,int b){ //求a和b的最大公约数if(a<b){int c=a;a=b;b=c;}int r=a%b;while(r!=0){a=b;b=r;r=a%b;}return b;}Rational add(Rational r) {int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*b+denominator*a;int newDenominator=denominator*b;Rational result=new Rational(newNumerator,newDenominator);return result;}Rational sub(Rational r) {int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*b-denominator*a;int newDenominator=denominator*b;Rational result=new Rational(newNumerator,newDenominator);return result;}Rational muti(Rational r) {int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*a;int newDenominator=denominator*b;Rational result=new Rational(newNumerator,newDenominator);return result;}Rational div(Rational r) {int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*b;int newDenominator=denominator*a;Rational result=new Rational(newNumerator,newDenominator);return result;}}Computer.javapublic class Computer {public static void main(String args[]) {Rational r1;r1=new Rational(1,5);//创建分子、分母分别为1和5的有理数r1Rational r2;r2=new Rational(3,2);//创建分子、分母分别为3和2的有理数r2Rational result=r1.add(r2); //r1调用方法和r2做加法运算int a=result.getNumerator(); // result调用方法返回自己的分子int b=result. getDenominator(); // result调用方法返回自己的分母double p=a;double q=b;double doubleResult=p/q;System.out.print("分数"+r1.getNumerator()+"/"+r1.getDenominator());System.out.print("与分数"+r2.getNumerator()+"/"+r2.getDenominator()+"的和等于");System.out.println(a+"/"+b+"="+doubleResult);r1.setNumeratorAndDenominator(4,7);r2.setNumeratorAndDenominator(-5,20);result=r1.muti(r2);a=result.getNumerator();b=result.getDenominator();p=a;q=b;doubleResult=p/q;System.out.print("分数"+r1.getNumerator()+"/"+r1.getDenominator());System.out.print("与分数"+r2.getNumerator()+"/"+r2.getDenominator()+"的积等于");System.out.println(a+"/"+b+"="+doubleResult);}}。