第4章类与对象==有理数的类封装(分数的四则运算)
2016-09-20 10:41
302 查看
问题;
对分数进行四则运算,使结果仍然是分数
代码:
Test.java
Rational.java
public class Rational {
int num;
int den;
void setNumAndDen(int fenzi,int fenmu){
int m=1,n=1;
if(fenzi<0)
m=-1*fenzi;
if(fenmu<0)
n=-1*fenmu;
if(fenzi==0){
num=0;
den=1;
return ;
}
int c=f(m,n);//把输入的分数进行约分
num=fenzi/c;
den=fenmu/c;
if(num<0&&den<0){
num=-num;
den=-den;//如果分子和分母都是负的,那就转换为正的
}
}
int getNum(){
return num;
}
int getDen(){
return den;
}
int f(int a,int b){
if(a<b){
int c=a;
a=b;
b=c;
}//转换使运算的时候a是最大的再进行求最大公约数
int r=a%b;
while(r!=0){
a=b;
b=r;
r=a%b;
}
return b;
}
Rational add(Rational r){//加法运算
int a=r.getNum();
int b=r.getDen();//得到分子分母
int newNum=num*b+den*a;//分子等于两数的分子都乘以对方的分母再相加
int newDen=den*b;//分母等于两个分母相乘
Rational result=new Rational();//新的分数
result.setNumAndDen(newNum,newDen);//再进行约分
return result;
}
Rational sub(Rational r){//减法运算
int a=r.getNum();
int b=r.getDen();//得到分子分母
int newNum=num*b-den*a;//分子等于两数的分子都乘以对方的分母再相减
int newDen=den*b;//分母等于两个分母相乘
Rational result=new Rational();//新的分数
result.setNumAndDen(newNum,newDen);//再进行判断约分
return result;
}
Rational muti(Rational r){//乘法运算
int a=r.getNum();
int b=r.getDen();//得到分子分母
int newNum=num*a;//分子等于两数的分子相乘
int newDen=den*b;//分母都与两个分母相乘
Rational result=new Rational();//新的分数
result.setNumAndDen(newNum,newDen);//再进行判断约分
return result;
}
Rational div(Rational r){//除法运算
int a=r.getNum();
int b=r.getDen();//得到分子分母
int newNum=num*b;//
int newDen=den*a;//改为乘以倒数的形式
Rational result=new Rational();//新的分数
result.setNumAndDen(newNum,newDen);//再进行判断约分
return result;
}
}
运行结果:
对分数进行四则运算,使结果仍然是分数
代码:
Test.java
public class Test { public static void main(String[]args){ Rational r1=new Rational(); Rational r2=new Rational();//声明两个分数对象 r1.setNumAndDen(3,5); int r1fenzi=r1.getNum(); int r1fenmu=r1.getDen();//输入第一个分数并化简 r2.setNumAndDen(3,2); int r2fenzi=r2.getNum(); int r2fenmu=r2.getDen();//输入第一个分数并化简 Rational result=r1.add(r2); int resultFenzi=result.getNum(); int resultFenmu=result.getDen();//得到结果 System.out.printf("\n%d/%d+%d/%d=%d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu); result=r1.sub(r2);//减法 resultFenzi=result.getNum(); resultFenmu=result.getDen();//得到结果 System.out.printf("\n%d/%d-%d/%d=%d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu); result=r1.muti(r2);//乘法 resultFenzi=result.getNum(); resultFenmu=result.getDen();//得到结果 System.out.printf("\n%d/%d*%d/%d=%d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu); result=r1.div(r2);//除法 resultFenzi=result.getNum(); resultFenmu=result.getDen();//得到结果 System.out.printf("\n%d/%d/%d/%d=%d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu); } }
Rational.java
public class Rational {
int num;
int den;
void setNumAndDen(int fenzi,int fenmu){
int m=1,n=1;
if(fenzi<0)
m=-1*fenzi;
if(fenmu<0)
n=-1*fenmu;
if(fenzi==0){
num=0;
den=1;
return ;
}
int c=f(m,n);//把输入的分数进行约分
num=fenzi/c;
den=fenmu/c;
if(num<0&&den<0){
num=-num;
den=-den;//如果分子和分母都是负的,那就转换为正的
}
}
int getNum(){
return num;
}
int getDen(){
return den;
}
int f(int a,int b){
if(a<b){
int c=a;
a=b;
b=c;
}//转换使运算的时候a是最大的再进行求最大公约数
int r=a%b;
while(r!=0){
a=b;
b=r;
r=a%b;
}
return b;
}
Rational add(Rational r){//加法运算
int a=r.getNum();
int b=r.getDen();//得到分子分母
int newNum=num*b+den*a;//分子等于两数的分子都乘以对方的分母再相加
int newDen=den*b;//分母等于两个分母相乘
Rational result=new Rational();//新的分数
result.setNumAndDen(newNum,newDen);//再进行约分
return result;
}
Rational sub(Rational r){//减法运算
int a=r.getNum();
int b=r.getDen();//得到分子分母
int newNum=num*b-den*a;//分子等于两数的分子都乘以对方的分母再相减
int newDen=den*b;//分母等于两个分母相乘
Rational result=new Rational();//新的分数
result.setNumAndDen(newNum,newDen);//再进行判断约分
return result;
}
Rational muti(Rational r){//乘法运算
int a=r.getNum();
int b=r.getDen();//得到分子分母
int newNum=num*a;//分子等于两数的分子相乘
int newDen=den*b;//分母都与两个分母相乘
Rational result=new Rational();//新的分数
result.setNumAndDen(newNum,newDen);//再进行判断约分
return result;
}
Rational div(Rational r){//除法运算
int a=r.getNum();
int b=r.getDen();//得到分子分母
int newNum=num*b;//
int newDen=den*a;//改为乘以倒数的形式
Rational result=new Rational();//新的分数
result.setNumAndDen(newNum,newDen);//再进行判断约分
return result;
}
}
运行结果:
相关文章推荐
- C++第5周任务【任务2】本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。
- 第15周任务2(窗口程序,完成分数的四则运算)
- 第八周项目三 分数类中的运算符重载-(2)分数与分数、分数与整数的四则运算
- 20150421 作业5 四则运算 测试与封装 5.1
- 四则运算 测试与封装
- 有理数的四则运算 C、java
- 练习5.1——四则运算 测试与封装
- 四则运算问题扩充:1、题目避免重复;2、可定制(数量/打印方式);3、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;
- java小练习(实现分数的四则运算)
- 四则运算测试与封装5.1 结对
- 第十五周实验报告2(分数四则运算窗口程序)
- Java有理数的四则运算
- java第七周封装一类对矩阵操作的对象,该类对象能够对矩阵进行运算,如矩阵中数据的位置变换功能、矩阵的加法功能、矩阵的乘法功能。
- 20150421 作业5 四则运算 测试与封装 5.1 5.2
- 整数展示分数和整形数的四则运算
- 第十五周实验--任务2--设计分数类,开发一个窗口式程序,可以完成分数的四则运算。
- java第二周作业--实现分数的四则运算
- JAVA--第七周实验-- 继续上周封装对象的编程练习,完成矩阵的运算。
- 四则运算 测试与封装 5.1
- 四则运算 测试与封装5.1