有理数类

代码

public class Rational {
    private long numerator = 0;  //分子
    private long denominator = 1;  //分母
    public Rational() {  
        this(0,1);
    }
    //获取分子
    public long getNumerator(){
        return numerator;
    }
    //获取分母
    public long getDenominator(){
        return denominator;
    }
    public Rational(long numerator, long denominator) {
        long gcd = gcd(numerator,denominator);
        this.numerator= ((denominator>0)? 1 : -1)*numerator / gcd;
        this.denominator=Math.abs(denominator)/gcd;
    }
    //求最大公约数
    public static long gcd(long n,long d){
        long n1=Math.abs(n);
        long n2=Math.abs(d);
        int gcd=1;
        for(int k=1;k<=n1&&k<=n2;k++){
            if(n1%k==0&&n2%k==0){
                gcd=k;
            }
        }
        return gcd;
    }
    //加法运算
    public Rational add(Rational secondRational){
        long n=numerator*secondRational.getDenominator()+
                denominator*secondRational.getNumerator();
        long d=denominator*secondRational.getDenominator();
        return new Rational(n,d);
    }
    //减法运算
    public Rational subtract(Rational secondRational){
        long n=numerator*secondRational.getDenominator()-
                denominator*secondRational.getNumerator();
        long d=denominator*secondRational.getDenominator();
        return new Rational(n,d);
    }
    //乘法运算
     public Rational multiply(Rational secondRational){
        long n=numerator*secondRational.getNumerator();
        long d=denominator*secondRational.getDenominator();
        return new Rational(n,d);
    }
    //除法运算
    public Rational divide(Rational secondRational){
        long n=numerator*secondRational.getDenominator();
        long d=denominator*secondRational.numerator;
        return new Rational(n,d);
    }

测试代码

package R1;
import R1.Rational;
public class Main {
	public static void main(String[] args) {
		Rational x=new Rational(4,5);
        Rational y=new Rational(1,2);
        System.out.println("相加得:"+x.add(y));//输出两分数相加的结果
        System.out.println("相减得:"+x.subtract(y));//输出两分数相减的结果
        System.out.println("相乘得:"+x.multiply(y));//输出两分数相乘的结果
        System.out.println("相除得:"+x.divide(y));//输出两分数相除的结果
	}
}

描述与C语言代码相比较,你设计的代码更加面向对象

与C语言相比,JAVA更加面向对象,JAVA直接在类里面把类的属性写出来,在同一个项目内的其他class里面就可以直接使用。

别人如何复用你的代码

只要导入我代码中有理数的类就可以使用。

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

是,会影响他人调用我的代码。

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

public表示公有的,private表示私有的;public的成员可以被任何类访问,private仅限于自己访问。

posted @ 2020-10-04 10:56  脸盲患者(钟恒)  阅读(66)  评论(0编辑  收藏  举报