java有理数类的封装_【Java 教程(原创)】025.参数传值——有理数的类封装

本文介绍了如何使用Java创建一个名为Rational的有理数类,该类包含分子和分母属性,以及加、减、乘、除等方法。通过这个类,可以进行有理数的四则运算并保持结果为分数形式。此外,示例代码展示了如何使用Rational对象进行实际的计算操作。
摘要由CSDN通过智能技术生成

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

本帖最后由 零度非安全 于 2017-4-7 11:09 编辑

点击图片穿越到 索引帖,听说有惊喜!

1. Rational(有理数)类

分数也称为有理数,是我们熟悉的一种数。有时希望程序能对分数进行四则运算,而且两个分数四则运算的结果仍是分数

(不希望看到 1/6 + 1/6 的结果是小数的近似值 0.333,而是 1/3)。

以下用类实现对有理数的封装。有理数有两个重要的成员,即分子和分母,另外还有重要的四则运算。Rational(有理数)

类应当具有以下属性(成员变量)和功能(方法)。

(1)Rational 类有两个 int 型的成员变量,例如,名字分别为 numerator(分子)和 denominator(分母)。

(2)提供 Rational add(Rational r) 方法,即有理数调用该方法和参数指定的有理数做加法运算,并返回一个 Rational

对象。

(3)提供 Rational sub(Rational r) 方法,即有理数调用该方法和参数指定的有理数做减法运算,并返回一个 Rational 对

象。

(4)提供 Rational muti(Rational r) 方法,即有理数调用该方法和参数指定的有理数做乘法运算,并返回一个 Rational

对象。

(5)提供 Rational div(Rational r) 方法,即有理数调用该方法和参数指定的有理数做除法运算,并返回一个 Rational 对

象。

根据以上分析,给出的 Rational 类代码如下:

Rational.java

public class Rational{

int numerator;                                          //分子

int denominator;                                        //分母

Rational(){

}

Rational(int a,int b){

if(a == 0){

numerator = 0;

denominator = 1;

}

else{

setNumeratorAndDenominator(a,b);

}

}

void setNumeratorAndDenominator(int a,int b){           //设置分子和分母

int c = f(Math.abs(a),Math.abs(b));                 //计算最大公约数

numerator = a / 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 < 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){                               //加法运算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b + denominator * a;

int newDenominator = denominator * b;

Rational result = new Rational(newNumerator,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(newNumerator,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(newNumerator,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(newNumerator,newDenominator);

return result;

}

}复制代码

2. 用 Rational 对象做运算

既然已经有了 Rational 类,那么就可以让类创建若干个对象,并让它们交互进行必要的四则运算来完成程序要达到的目

的。下面的主类 MainClass 使用 Rational 对象计算两个分数的四则运算,并计算 计算 2/1 + 3/2 + 5/3 + 8/5 + 13/8 + ···

的前 10 项和。

MainClass.java

public class MainClass{

public static void main(String[] args){

Rational r1 = new Rational(1,5);

Rational r2 = new Rational(3,2);

Rational result = r1.add(r2);

int a = result.getNumerator();

int b = result.getDenominator();

System.out.println("1/5 + 3/2 = " + a + "/" + b);

result = r1.sub(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println("1/5 - 3/2 = " + a + "/" + b);

result = r1.muti(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println("1/5 × 3/2 = " + a + "/" + b);

result = r1.div(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println("1/5 ÷ 3/2 = " + a + "/" + b);

int n = 10,k = 1;

System.out.println("计算 2/1 + 3/2 + 5/3 + 8/5 + 13/8 + ··· 的前" + n + "项和");

Rational sum = new Rational(0,1);

Rational item = new Rational(2,1);

while(k <= n){

sum = sum.add(item);

k++;

int fenzi = item.getNumerator();

int fenmu = item.getDenominator();

item.setNumeratorAndDenominator(fenzi + fenmu,fenzi);

}

a = sum.getNumerator();

b = sum.getDenominator();

System.out.println("用分数表示:");

System.out.println(a + "/" + b);

double doubleResult = (a * 1.0) / b;

System.out.println("用小数表示:");

System.out.println(doubleResult);

}

}复制代码

运行效果如下所示:

MainClass.jpg (48.42 KB, 下载次数: 0)

2017-3-12 13:50 上传

【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值