# 1.有理数类的代码

package R1;
public class Rational{
private int numerator;//分子
private int denominator;//分母
public int getNumerator() //获取分子
{
return numerator;
}

public int getDenominator()//获取分母
{
return denominator;
}
public Rational() {//无参构造函数
this(0,1);
}
public Rational(int numerator,int denominator)//构造函数
{
int gcd=gcd(numerator,denominator);
this.numerator=((denominator>0)?1:-1)*numerator/gcd;
this.denominator=Math.abs(denominator)/gcd;
}
private static int gcd(int numerator,int denominator)//求最大公约数
{
int n1=Math.abs(numerator);
int n2=Math.abs(denominator);
int tmp;
while (n2 != 0) {
tmp = n1 % n2;
n1 = n2;
n2 = tmp;
}
return n1;
}
{
int n=this.numerator*secondRational.getDenominator()+this.denominator*secondRational.getNumerator();
int d=this.denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational subtract(Rational secondRational)//减法
{
int n=this.numerator*secondRational.getDenominator()-this.denominator*secondRational.getNumerator();
int d=this.denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational multiply(Rational secondRational)//乘法
{
int n=this.numerator*secondRational.getNumerator();
int d=this.denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational divide(Rational secondRational)//除法
{
int n=this.numerator*secondRational.getDenominator();
int d=this.denominator*secondRational.getNumerator();
return new Rational(n,d);
}
public boolean equals(Object secondRational){//判断是否相等
if((this.subtract((Rational)(secondRational))).getNumerator()==0){
return true;
}
else return false;
}
public int compare(Rational secondRational)//比较大小
{
if (this.subtract(secondRational).getNumerator()>0)
return 1;
else if (this.subtract(secondRational).getNumerator()==0)
return 0;
else
return -1;
}
public String toString()//转换为string类型
{
if (this.denominator==1)
{
return this.numerator+"";
}else{
return this.numerator+"/"+this.denominator;
}
}
public int intValue() //将Rational转换为int型
{
return (int)doubleValue();
}

public long longValue() //将Rational转换为long型
{
return (long)doubleValue();
}

public float floatValue()  //将Rational转换为float型
{
return (float)doubleValue();
}

public double doubleValue() //将Rational转换为double型
{
return this.numerator*1.0/this.denominator;
}
}


# 2.测试的代码

package R1;
import R1.Rational;
public class Main {
public static void main(String[] args) {
Rational x=new Rational(5,6);
Rational y=new Rational(2,3);
System.out.println("有理数的分数形式："+x.toString());//输出x的分数形式
System.out.println("有理数相减得："+y.toString());//输出y的分数形式
System.out.println("两有理数相减得："+x.subtract(y));//输出两分数相减的结果
System.out.println("两有理数相乘得："+x.multiply(y));//输出两分数相乘的结果
System.out.println("两有理数相除得："+x.divide(y));//输出两分数相除的结果
System.out.println("两有理数是否相等："+x.equals(y));//判断两分数是否相等
System.out.println("两有理数的大小关系："+x.compare(y));//比较两分数大小
}
}


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

c语言更加的面向过程，需要考虑写什么样的函数来完成它，而Java更多的是对类的编写，很多都是直接调用即可，因此Java更加面向对象。

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

posted @ 2020-10-04 00:35  GGG(郭其松)  阅读(119)  评论(0编辑  收藏  举报