java实验报告有理数的类封装
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华中科技大学文华学院
《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.java
public 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.java
public class Computer {
public static void main(String args[]) {
Rational r1;
【代码1】//创建分子、分母分别为1和5的有理数r1
Rational r2;
【代码2】//创建分子、分母分别为3和2的有理数r2
Rational 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.java
public 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.java
public class Computer {
public static void main(String args[]) {
Rational r1;
r1=new Rational(1,5);//创建分子、分母分别为1和5的有理数r1
Rational r2;
r2=new Rational(3,2);//创建分子、分母分别为3和2的有理数r2
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.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);
}
}。