一、代码

Rational(有理数)类代码
package Rational;
public class Rational {
private long numerator; //分子
private long denominator;//分母
/*构造无参函数*/
public Rational() {
this(0,1);
}
/*辗转相除法求两数的最大公约数*/
private long gcd(long a,long b) {
if(b==0)
return a;
return gcd(b,a%b);
}
/*构造参数函数*/
public Rational(long a,long b) {
numerator=a;
denominator=b;
long k=gcd(numerator, denominator);
if(k>1) {
numerator/=k;
denominator/=k;
}
}
/*加法运算*/
public Rational myAdd(Rational x) {
return new Rational(numerator*x.getDenominator()+x.getNumerator()*denominator,denominator*x.getDenominator());
}
/*减法运算*/
public Rational mySub(Rational x) {
return new Rational(numerator*x.getDenominator()-x.getNumerator()*denominator,denominator*x.getDenominator());
}
/*乘法运算*/
public Rational myMul(Rational x) {
return new Rational(numerator*x.getNumerator(),denominator*x.getDenominator());
}
/*除法运算*/
public Rational myDiv(Rational x) {
return new Rational(numerator*x.getDenominator(),denominator*x.getNumerator());
}
/*设置分子的值*/
public void setNumerator(long numerator) {
this.numerator = numerator;
}
/*设置分母的值*/
public void setDenominator(long denominator) {
this.denominator = denominator;
}
/*获取分子的值*/
public long getNumerator() {
return numerator;
}
/*获取分母的值*/
public long getDenominator() {
return denominator;
}
/*比较两个有理数是否相等*/
public boolean myEquals(Rational x) {
if((numerator==x.getNumerator())&&(denominator==x.getDenominator()))
return true;
return false;
}
/*比较两个有理数的大小*/
public int myCompare(Rational x) {
if (this.mySub(x).numerator>0)
return 1;
else if(this.mySub(x).numerator==0)
return 0;
else return -1;
}
}

测试代码(main)

import Rational.Rational;
public class Main {
public static void main(String[] args) {
Rational rat1=new Rational(1,2);
Rational rat2=new Rational(3,4);
Rational c;
System.out.println("第一个有理数为:"+rat1.getNumerator()+"/"+rat1.getDenominator());
System.out.println("第二个有理数为:"+rat2.getNumerator()+"/"+rat2.getDenominator());
/*加法运算*/
c=rat1.myAdd(rat2);
System.out.println("两个有理数相加结果为:"+rat1.getNumerator()+"/"+rat1.getDenominator()+"+"+rat2.getNumerator()+"/"+rat2.getDenominator()+"="+c.getNumerator()+"/"+c.getDenominator());
/*减法运算*/
c=rat1.mySub(rat2);
System.out.println("两个有理数相减结果为:"+rat1.getNumerator()+"/"+rat1.getDenominator()+"-"+rat2.getNumerator()+"/"+rat2.getDenominator()+"="+c.getNumerator()+"/"+c.getDenominator());
/*乘法运算*/
c=rat1.myMul(rat2);
System.out.println("两个有理数相乘结果为:"+rat1.getNumerator()+"/"+rat1.getDenominator()+"*"+rat2.getNumerator()+"/"+rat2.getDenominator()+"="+c.getNumerator()+"/"+c.getDenominator());
/*除法运算*/
c=rat1.myDiv(rat2);
System.out.println("两个有理数相除结果为:"+rat1.getNumerator()+"/"+rat1.getDenominator()+"÷"+rat2.getNumerator()+"/"+rat2.getDenominator()+"="+c.getNumerator()+"/"+c.getDenominator());
/*da'xiao运算*/
int k=rat1.myCompare(rat2);
if(k>1)
System.out.println("两个有理数的大小比较结果为:"+rat1.getNumerator()+"/"+rat1.getDenominator()+">"+rat2.getNumerator()+"/"+rat2.getDenominator());
else if (k==0) {
System.out.println("两个有理数的大小比较结果为:"+rat1.getNumerator()+"/"+rat1.getDenominator()+"="+rat2.getNumerator()+"/"+rat2.getDenominator());
}
else
System.out.println("两个有理数的大小比较结果为:"+rat1.getNumerator()+"/"+rat1.getDenominator()+"
}
}

测试结果截图

java rational java rational类_java程序设计有理数

二、有理数类功能介绍及相关问题回答

1.功能介绍

该自定义的Rational类存放在Rational包里,它可以返回有理数的最简形式,可以对两个有理数进行加、减、乘、除运算,亦可以比较两个有理数的大小,判断两个有理数是否相等。它可以在main函数中通过set对有理数的值进行更改。

2.相关问题

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

A1:c语言的有理数代码多倾向于构造函数来对有理数(对象)的属性进行操作,而用java设计的类方法则是偏向直接面对有理数(对象)进行操作。

Q2:别人如何复用你的代码?

A2:导入我的Rational包即可

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

A3:是的,别人的代码会依赖我的有理数类属性。当我的有理数属性修改时,不会影响他人调用我的有理数代码。因为设计的有理数类中,有理数的属性类型为private型,且在类中给出了setter、getter的方法。

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

A4:在该有理数类的设计中,我已把提供使用的方法设置为了public,而不被别人使用的,设置为了private。如加减乘除的运算,则是可以使用的;而求最大公约数(gcd)只是辅助我完成对有理数类的设计而存在,其被设为private。