1.两个分数四则运算的结果仍然是分数。
uml图
Rational |
numerator:int denominator:int |
setNumeratorAndDenominator(int,int):void add(Rational):Rational sub(Rational):Rational muti.... diu...... |
类设计完成后,进行编码
public class Rational {
int numerator = 1; //分子
int denominator = 1; //分母
void setNumerator(int a){
int c=f(Math.abs(a),denominator);
numerator=a/c;
denominator=denominator/c;
if(numerator<0&&denominator<0){
numerator=-numerator;
denominator=-denominator;
}
}
void setDenominator(int b){
int c =f(numerator,Math.abs(b));
numerator=numerator/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==0){return 1;}
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){ //返回一个Rational类型,对象创建后,可以使用点运算符调用方法。
int a=r.getNumerator();
int b=r.getDenominator();
int newNumerator = numerator*b+denominator*a;
int newDenominator =denominator*b;
Rational result = new Rational();
result.setNumerator(newNumerator);
result.setDenominator(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();
result.setNumerator(newNumerator);
result.setDenominator(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();
result.setNumerator(newNumerator);
result.setDenominator(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();
result.setNumerator(newNumerator);
result.setDenominator(newDenominator);
return result;
}
}
有几个侧重点需要理解一下:
1.方法的返回类型可以是实体类。
2.体会封装的含义。(将数据和对数据的操作封装在类中,即通过对象从具体的实例中抽取出共同的性质形成类的概念,再由类创建具体的对象,然后对象调用方法产生行为以达到程序要实现的目的。)