这里的各个方法之间都有很紧密的联系,小伙伴们要耐心地来回推敲哦
/**
* Created with IntelliJ IDEA.
* Description: Hello,I would appreciate your comments~
* User: 葛玉礼
* Date: 2022-03-19
* Destination:有理数之间的运算
*/
public class RationalNumber {
private int numerator;//分子
private int denominator;//分母
public RationalNumber(int numer, int denom){
if(denom == 0){
denom = 1;
}
if(denom < 0){
numer = numer * -1;
denom = denom * -1;
}
numerator = numer;
denominator = denom;
reduce();//这个方法后面会写到
}
// 构建函数,用来初始化
public int getNumerator(){
return numerator;
// 返回分子
}
public int getDenominator(){
return denominator;
// 返回分母
}
public RationalNumber reciprocal(){
return new RationalNumber(denominator,numerator);
// 这里返回值类型为本RationalNumber类返回值类型,分子分母位置调换,所以方法作用为返回倒数
}
public RationalNumber add(RationalNumber op2){
int commonDenominator = denominator * op2.getDenominator();
int numerator1 = numerator * op2.getDenominator();
int numerator2 = op2.getNumerator() * denominator;
int sum = numerator1 + numerator2;
return new RationalNumber(sum,commonDenominator);
// 和作为分子,分母之积作为分母
}
public RationalNumber subtract(RationalNumber op2){
int commonDenominator = denominator * op2.getDenominator();
int numerator1 = numerator * op2.getDenominator();
int numerator2 = op2.getNumerator() * denominator;
int difference = numerator1 - numerator2;
return new RationalNumber(difference,commonDenominator);
}
// 以上为有理数的减法运算
public RationalNumber multiply(RationalNumber op2){
int numer = numerator * op2.getNumerator();
int denom = denominator * op2.getDenominator();
return new RationalNumber(numer,denom);
}
// 以上为有理数的乘法运算
public RationalNumber divide (RationalNumber op2){
return multiply(op2.reciprocal());
// 有理数的除法,除一个数则是乘这个数的倒数
}
public boolean isLike(RationalNumber op2){
return (numerator == op2.getNumerator()&&denominator == op2.getDenominator());
}
// 确定此有理数是否等于作为参数传递的有理数,假设在两者都被化简过的情况下
public String toString (){
String result;
if (numerator == 0){
result = "0";
}else if(denominator == 1){
result = numerator +"";
}else {
result = numerator + "/" + denominator;
}
return result;
// 将有理数转化为字符串
}
private void reduce(){
if(numerator != 0){
int common = gcd(Math.abs(numerator),denominator);
numerator = numerator / common;
denominator = denominator / common;
}
}
// 重要的动作:化简,这里的gcd为返回最大公因数
private int gcd(int num1, int num2){
while (num1 != num2){
if(num1>num2){
num1 = num1 - num2;
}else {
num2 = num2 - num1;
}
}
return num1;
}
}
然后我们再来进行对它的一个测试
/**
* Created with IntelliJ IDEA.
* Description: Hello,I would appreciate your comments~
* User: 葛玉礼
* Date: 2022-03-19
* Destination:这是一个利用有理数方法来解释依赖概念的类
*/
public class RationalTest {
// 我们进一步利用有理数的类中的方法来解释我们的概念
public static void main(String[] args) {
RationalNumber r1 = new RationalNumber(6,8);
RationalNumber r2 = new RationalNumber(1,3);
RationalNumber r3, r4, r5 ,r6, r7;
System.out.println("First rational number:" + r1);
System.out.println("Second rational number:" + r2);
if(r1.isLike(r2)){
System.out.println("r1 and r2 are equal.");
}else {
System.out.println("r1 and r2 are not equal.");
r3 = r1.reciprocal();
r4 = r1.add(r2);
r5 = r1.subtract(r2);
r6 = r1.multiply(r2);
r7 = r1.divide(r2);
System.out.println("r1 + r2 = " + r4);
System.out.println("r1 - r2 = " + r5);
System.out.println("r1 * r2 = " + r6);
System.out.println("r1 / r2 = " + r7);
}
}
}
测试结果为
r1 and r2 are not equal.
r1 + r2 = 13/12
r1 - r2 = 5/12
r1 * r2 = 1/4
r1 / r2 = 9/4