《有理数的类封装》由会员分享,可在线阅读,更多相关《有理数的类封装(5页珍藏版)》请在金锄头文库上搜索。
1、题目:编写一个 Java 应用程序,改程序中有一个 Ratinal(有理数 )类。1. Rational 类有两个 int 型的成员变量,名字分别为 numerator(分子)和denominator(分母)。2. 提供 Rational add(Rational r)方法,即有理数调用该方法与参数指定的有理数做加法运算,并返回一个 Rational 对象。3. 提供 Rational sub(Rational r)方法,即有理数调用该方法与参数指定的有理数做减法运算,并返回一个 Rational 对象。4. 提供 Rational muti(Rational r)方法,即有理数调用该方法与参
2、数指定的有理数做乘法运算,并返回一个 Rational 对象。5. 提供 Rational div(Rational r)方法,即有理数调用该方法与参数指定的有理数做加法运算,并返回一个 Rational 对象。代码:(两个文件)Rational.javapackage com.chapter4;public class Rational int numerator,denominator; /Rational类的两个成员变量分子和分母Rational()Rational(int a,int b)setNumeratorAndDenominator(a,b);void setNumerator
3、AndDenominator(int a, int b) /设置分子和分母/ int c=f(Math.abs(a),Math.abs(b);/计算最大公约数/ numerator=a/c;/ denominator=b/c;numerator=a;denominator=b;if(numerator0&denominator0)numerator=-numerator;denominator=-denominator;int getNumerator()return numerator;int getDenominator()return denominator ;/* int f(int
4、a , int b ) /求a和b 的最大公约数if(ab)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);re
5、turn 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.getDenominat
6、or();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 Rationa
7、l(newNumerator,newDenominator);return result;Computer.java:package com.chapter4;public class Computer public static void main(String args) Rational r1 ;r1=new Rational(1,5); /创建分子分母分别为1 和5的有理数r1r1.denominator=5;Rational r2 ;r2=new Rational(3,2); /创建分子分母分别为3 和2的有理数r2/ System.out.println(r2+r2.getNume
8、rator()+/+r2.getDenominator();Rational 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.println(与
9、分数 +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()+
10、/+r1.getDenominator(); System.out.println(与分数 +r2.getNumerator()+/+r2.getDenominator()+的积等于:); System.out.println(a+/+b+=+doubleResult); 运行结果图:知识点:学会使用类来封装对象的属性和功能。感想:我原本按照书本敲(我用的教程是 Java 大学教程(第二版) 张跃平 耿祥义 编 电子工业出版社) ,结果发现 R2=3/2 显示为 1/1,也就是当分子大于分母的时候,显示不正常。于是我加了一个打印语句用来显示检查:/System.out.println(r2+r
11、2.getNumerator()+/+r2.getDenominator();发现问题出现在构造实数时,那个除以公约数的部分我觉得不需要,而且情况不全,只写了分子小于分母的情况,然后我就把它注销了。/ int c=f(Math.abs(a),Math.abs(b);/计算最大公约数/ numerator=a/c;/ denominator=b/c;numerator=a;denominator=b;/* int f(int a , int b ) /求a和b 的最大公约数if(ab)int c=a;a=b;b=c;int r=a%b;while(r!=0)a=b;b=r;r=a%b;return b;*/PS:可以扩展练习一下:在 computer.java 增加计算有理数除法的代码在 computer.java 增加计算 1+3/2+5/3+8/5+13/8.前 20 项的代码。