标签:有理数 secondRational denominator numerator long Rational 设计 public
有理数类的设计
一、有理数类的代码
class Rational{
private long numerator;
private long denominator;
public long getNumerator() {
return numerator;
}
public void setNumerator(long numerator) {
this.numerator = numerator;
}
public long getDenominator() {
return denominator;
}
public void setDenominator(long denominator) {
this.denominator = denominator;
}
public Rational() {
super();
this.numerator = 0;
this.denominator = 1;
}
public Rational(long numerator, long denominator) {
super();
long gcd = gcd(numerator,denominator);
this.numerator = numerator/gcd;
this.denominator = denominator/gcd;
}
private long gcd(long n, long d) {
long s1 = Math.abs(n);
long s2 = Math.abs(d);
long remander = s1%s2;
while(remander!= 0) {
s1 = s2;
s2 = remander;
remander = s1%s2;
}
return s2;
}
public Rational add(Rational secondRational) {
long n = numerator*secondRational.getDenominator()+denominator*secondRational.getNumerator();
long d = denominator*secondRational.getDenominator();
System.out.println(n+" "+d);
return new Rational(n,d);
}
public Rational subtract(Rational secondRational) {
long n = numerator*secondRational.getDenominator()-denominator*secondRational.getNumerator();
long d = denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational multiply(Rational secondRational) {
long n = numerator*secondRational.getNumerator();
long d = denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational divide(Rational secondRational) {
long n = numerator*secondRational.getDenominator();
long d = denominator*secondRational.getNumerator();
return new Rational(n,d);
}
public String toString() {
if(denominator == 1) {
return numerator+"";
}
else {
return numerator+"/"+denominator;
}
}
}
二、测试代码
public class testz{
public static void main(String[] args) {
Rational r1 = new Rational(2,1);
Rational r2 = new Rational(2,3);
System.out.println(r1.toString()+"+"+r2.toString()+"="+(r1.add(r2)).toString());
System.out.println(r1.toString()+"-"+r2.toString()+"="+(r1.subtract(r2)).toString());
System.out.println(r1.toString()+"*"+r2.toString()+"="+(r1.multiply(r2)).toString());
System.out.println(r1.toString()+"/"+r2.toString()+"="+(r1.divide(r2)).toString());
}
}
三、讨论
1、描述怎么与c语言的有理数代码相比较,为什么你设计的类更加面向对象?
c语言会更多考虑面向过程,用什么函数来实现它,过程要怎么样;类中很多已经规定好了,直接调用就行了,更多会思考如何优化对象。
2、别人如何复用你的代码?
导入有理数类的属性。
3、别人的代码是否依赖你的有理数类的属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?
依赖,有影响。
4、有理数类的public方法是否设置合适?为什么有的方法设置为private?
publish方法可以被任何成员访问,private方法仅限自己访问。本次设计中private隐藏的是两个数据(long numerator,long denominator)。
标签:有理数,secondRational,denominator,numerator,long,Rational,设计,public 来源: https://www.cnblogs.com/t----j/p/13766174.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。