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

1.有理数类的代码

package pta;

public class Rational {

private int numerator; // 分子

private int denominator; // 分母

public Rational(int n, int d) {

this.numerator = n;

this.denominator = d;

} // 构造函数

public int getNumerator() {

return numerator;

} // 获取分子

public int getDenominator() {

return denominator;

} // 获取分母

public Rational add(Rational secondRational) {

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

int d = denominator * secondRational.getDenominator();

return new Rational(n, d);

} // 加法

public Rational subtract(Rational secondRational) {

int n = numerator * secondRational.getDenominator() - denominator * secondRational.getNumerator();

int d = denominator * secondRational.getDenominator();

return new Rational(n, d);

} // 减法

public Rational multiply(Rational secondRational) {

int n = numerator * secondRational.getNumerator();

int d = denominator * secondRational.getDenominator();

return new Rational(n, d);

} // 乘法

public Rational divide(Rational secondRational) {

int n = numerator * secondRational.denominator;

int d = denominator * secondRational.numerator;

return new Rational(n, d);

} // 除法

public int compare(Rational r2) {

long n = this.numerator * r2.denominator - this.denominator * r2.numerator;

if (n > 0)

System.out.println("r1>r2");

else if (n < 0)

System.out.println("r1

else

System.out.println("r1==r2");

return 0;

} // 比较大小

public String toString() {

if (denominator == 1)

return numerator + "";

else

return numerator + "/" + denominator;

} // 返回字符串

public int intValue() {

return (int) doubleValue1();

} // 将Rational转为int型

public long longValue() {

return (long) doubleValue1();

} // 将Rational转为long型

public float floatValue() {

return (float) doubleValue1();

} // 将Rational转为float型

public double doubleValue1() {

return numerator * 1.0 / denominator;

} // 将Rational转为double型

}

2.与有理数类不同包的其他类中调用有理数类的测试代码

package pta1;

import pta.*;

public class Rational1 {

public static void main(String[] args) throws Exception {

Rational test1 = new Rational(-1, 5);

Rational test2 = new Rational(4, 7);

System.out.println("test1 + test2 = " + test1.add(test2));

System.out.println("test1 - test2 = " + test1.subtract(test2));

System.out.println("test1 * test2 = " + test1.multiply(test2));

System.out.println("test1 / test2 = " + test1.divide(test2));

System.out.println("将test1转为int型:" + test1.intValue());

System.out.println("将test1转为long型:" + test1.longValue());

System.out.println("将test2转为float型:" + test2.floatValue());

System.out.println("将test2转为double型:" + test2.doubleValue1());

System.out.println("将test2转为toString型:" + test2.toString());

test1.compare(test2);

}

}

3.测试结果

9d5eeb24eb32a879730746dd141d5c6b.png

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

答:因为设计的类的方法和属性是针对它本身特性来考虑的,面向对象;而C语言更多通过函数调用,面向过程。

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

a.别人如何复用你的代码?

答:导入我的有理数的包即可。

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

答:别人的代码会依赖于我的有理数类的属性,因为别人在与我的有理数类不同包的其他类中调用了我的有理数类;由于我的有理数类的属性使用private进行了封装,所以当我的有理数类的属性修改时,不会影响他人调用我的有理数代码。

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

答:合适;因为public类设置的方法有加减乘除运算以及比较大小等和返回不同类型等,都是在操作中要用到的相关基础操作;而两个协助完成public方法的私有数据则用private,因为外界不需要知道public里面的具体结构,设置private起到隐藏类的实现细节和保护类的数据的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值