通过前几节课我们学习了Java中对象类的属性,方法,构造方法,封装等相关知识,这节课通过一个分式计算器项目来练习Java类的知识。分式由两个部分组成:分子和分母,在本项目中需要定义两个类,Fraction
类,是一个对象类,这个类中定义了分式的属性,构造方法和分式的运算方法。FrationCalculator
类是一个客户类,这个类主要处理与用户的交互,调用Fraction
类获取分式计算结果,并将结果返回给用户。
Fraction
类属性
构造方法
IllegalArgumentException()
的异常在程序的后两个构造方法中,我们要尽量借助this
关键字利用前一个构造方法来简化代码。
方法
方法名 | 参数 | 返回值 | 描述 |
---|---|---|---|
getNumerator() | none | int | 返回分式中numerator的值 |
getDenominator() | none | int | 返回分式中denominator的值 |
toString() | none | String | 以”numerator/denominator”的格式返回分式的值 |
toDouble() | none | double | 计算分式的值,返回double类型的计算结果 |
add() | Fraction other | Fraction | 返回与另一个分式相加以后的分式 |
subtract() | Fraction other | Fraction | 返回与另一个分式相减以后的分式 |
multiply() | Fraction other | Fraction | 返回与另一个分式相乘以后的分式 |
divide() | Fraction other | Fraction | 返回与另一个分式相除以后的分式 |
equals() | Object other | boolean | 检查两个分式是否相等 |
toLowestTerms() | none | none | 对分式进行约分 |
gcd() | int num, int den | int | 返回两个整数的最大公约数,定义为static方法 |
equals()
重写Object类的public boolean equals(Object other)
方法。首先判断对象是否是Fraction类,然后判断传入的分式与当前分式是否相等。
注意: 1/2与2/4比较,结果返回true。
toLowestTerms()
将分式的分子与分母进行约分操作,更新分式numerator和denominator的属性值,保持分式整体的值不变。约分的关键是找到分子与分母的最大公约数,关于求最大公约数的算法,以下是辗转相除法的伪代码:
if a equals b
return a or b;
find the reminder of a dived by b
if reminder equals zero
return b
else
set a to b
set b to reminder
FractionCalculator
类在这个类中,我们打印信息到控制台,接收用户从控制台输入的信息,对信息进行处理,并返回结果。
程序逻辑
> This program is a fraction calculator
It will add, subtract, multiply and divide fractions until you type Q to quit.
Please enter your fractions in the form a/b, where a and b are integers.
>------------------------------------------------------------------------------------
>Please enter an operation (+, -, /, *, = or Q to quit)+
Please enter first fraction (a/b) or integer (a): 1/2
Please enter second fraction (a/b) or integer (a): 1/4
1/2 + 1/4 = 3/4
Please enter an operation (+, -, /, *, = or Q to quit)-
Please enter first fraction (a/b) or integer (a): 2/3
Please enter second fraction (a/b) or integer (a): 1/3
2/3 - 1/3 = 1/3
Please enter an operation (+, -, /, *, = or Q to quit)*
Please enter first fraction (a/b) or integer (a): 1/4
Please enter second fraction (a/b) or integer (a): 3/5
1/4 * 3/5 = 3/20
Please enter an operation (+, -, /, *, = or Q to quit)/
Please enter first fraction (a/b) or integer (a): 3/5
Please enter second fraction (a/b) or integer (a): 2/5
3/5 / 2/5 = 3/2
Please enter an operation (+, -, /, *, = or Q to quit)=
Please enter first fraction (a/b) or integer (a): 1/4
Please enter second fraction (a/b) or integer (a): 2/8
1/4 = 2/8 is true
Please enter an operation (+, -, /, *, = or Q to quit)q
>
>Process finished with exit code 0
关于该项目的示例代码,可以从GitHub中下载Project - FracCalc。