java有理数类的封装_Java-有理数类设计

本文介绍了一个Java实现的有理数类,包括构造函数、最大公约数计算、加减乘除运算以及比较方法。代码设计遵循面向对象原则,通过封装保护数据,并提供公共接口供外部调用。此外,文章还探讨了与C语言中实现有理数类的对比,强调了Java代码的灵活性和复用性。讨论了代码复用的场景,指出类的属性和方法设计确保了数据安全性和对外一致性。
摘要由CSDN通过智能技术生成

一、有理数类代码

package text;

public class Rational {

private long numerator = 0; //分子

private long denominator = 1; //分母

public Rational() { //构造函数

this(0,1);

}

public Rational(long numerator, long denominator) { //求最大公约数

long gcd = gcd(numerator,denominator);

this.numerator= ((denominator>0)? 1 : -1)*numerator / gcd;

this.denominator=Math.abs(denominator)/gcd;

}

private long gcd(long numerator, long denominator) {

// TODO Auto-generated method stub

long n = Math.abs(numerator);

long d = Math.abs(denominator);

int gcd = 1;

for(int i=1;i<=numerator&&i<=denominator;i++) {

if(numerator%i == 0&&denominator%i == 0) {

gcd=i;

}

}

return gcd;

}

public long getNumerator(){

return numerator;

}

public long getDenominator(){

return denominator;

}

public Rational add(Rational secondRational){ //加法

long n=numerator*secondRational.getDenominator()+denominator*secondRational.getNumerator();

long d=denominator*secondRational.getDenominator();

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.numerator;

return new Rational(n,d);

}

public int Compare(Rational s) {

if(numerator == s.getNumerator()) {

return 0; //两数相等

}

else if((numerator > s.getNumerator() && denominator <= s.getDenominator())||(numerator == s.getNumerator()&&nenominator < s.getDenominator())) {

return 1; //前者大于后者

}

else {

return -1; //后者大于前者

}

}

}

二、测试代码

package text;

import text.Rational;

public class Main {

public static void main(String[] args) {

Rational r1 = new Rational(8,9);

Rational r2 = new Rational(2,3);

System.out.println("r1 + r2 = "+r1.add(r2).getNumerator()+'/'+r1.add(r2).getDenominator());

System.out.println("r1 - r2 = "+r1.subtract(r2).getNumerator()+'/'+r1.subtract(r2).getDenominator());

System.out.println("r1 * r2 = "+r1.multiply(r2).getNumerator()+'/'+r1.multiply(r2).getDenominator());

System.out.println("r1 / r2 = "+r1.divide(r2).getNumerator()+'/'+r1.divide(r2).getDenominator());

System.out.println("r1与r2比较结果:"+r1.Compare(r2)+"(0:r1=r2;1:r1>r2;-1:r1

}

}

三、运行截图

fd7fd5fcfadce50ab622938a0582715c.png

四、 描述怎么与c语言的有理数代码相比较,为什么你设计的类更加面向对象?

C语言倾向于编写全部代码,重过程;Java更倾向于将数据和方法进行封装和调用,更加灵活

五、尝试从代码复用的角度来描述你设计的有理数类。从几个方面讨论。

别人如何复用你的代码?

导入我的数据包

别人的代码是否依赖你的有理数类的属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?

依赖,调用了我的有理数类。

不会,我的类属性修改,属于private型,不会影响他人调用。

有理数类的public方法是否设置合适?为什么有的方法设置为private?

是。

private型他人无法调用,保障了数据的安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值