• 有理数类设计


    一、有理数代码

    package rl;
    
    public class Rational {
    	private int numerator;//分子
        private int denominator;//分母
        public int getNumerator() //获取分子
        {
            return numerator;
        }
        public int getDenominator()//获取分母
        {
            return denominator;
        }
        public Rational()//无参构造函数
        {
            this.numerator=0;
            this.denominator=1;
        }
        private static int gcd(int n,int d)//求最大公约数
        {
            int n1=Math.abs(n);
            int n2=Math.abs(d);
            int tmp;
            while (n2 != 0) {
                tmp = n1 % n2;
                n1 = n2;
                n2 = tmp;
            }
            return n1;
        }
        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;
        }
        public Rational add(Rational newRational)//加
        {
            int n=this.numerator*newRational.getDenominator()+this.denominator*newRational.getNumerator();
            int d=this.denominator*newRational.getDenominator();
            return new Rational(n,d);
        }
        public Rational subtract(Rational newRational)//减
        {
            int n=this.numerator*newRational.getDenominator()-this.denominator*newRational.getNumerator();
            int d=this.denominator*newRational.getDenominator();
            return new Rational(n,d);
        }
        public Rational multiply(Rational newRational)//乘
        {
            int n=this.numerator*newRational.getNumerator();
            int d=this.denominator*newRational.getDenominator();
            return new Rational(n,d);
        }
        public Rational divide(Rational newRational)//除
        {
            int n=this.numerator*newRational.getDenominator();
            int d=this.denominator*newRational.getNumerator();
            return new Rational(n,d);
        }
        public void compare(Rational newRational)//比较大小
        {
            if (this.subtract(newRational).getNumerator()==0)
                System.out.println("x=y");
            else if(this.subtract(newRational).getNumerator()>0)
            	 System.out.println("x>y");
            else
            	System.out.println("x<y");
        }
        public String toString()//转换为字符串类型
        {
            if (this.denominator==1)
            {
                return this.numerator+"";
            }else{
                return this.numerator+"/"+this.denominator;
            }
        }
        public int intValue() //转换为int型
        {
            return (int)doubleValue();
        }
    
        public long longValue() //转换为long型
        {
            return (long)doubleValue();
        }
    
        public float floatValue()  //转换为float型
        {
            return (float)doubleValue();
        }
    
        public double doubleValue() //转换为double型
        {
            return this.numerator*1.0/this.denominator;
        }
    }
    

    二、测试代码

    import rl.Rational;
    public class Main {
        public static void main(String[] args){
            Rational x=new Rational(1,2);
            Rational y=new Rational(3,4);
            System.out.println("x="+x.toString());
            System.out.println("y="+y.toString());
            System.out.println("x+y="+x.add(y));
            System.out.println("x-y="+x.subtract(y));
            System.out.println("x*y="+x.multiply(y));
            System.out.println("x/y="+x.divide(y));
            x.compare(y);
            System.out.println(x.intValue());
            System.out.println(x.longValue());
            System.out.println(x.floatValue());
            System.out.println(x.doubleValue());
        }
    }
    

    三、测试结果

    四、讨论

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

    C语言面向过程,编写程序的执行过程,Java面向对象,主要编写功能繁多的类,运用时进行相应调用即可。

    2、别人如何复用你的代码?

    导入该有理数包

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

    是,不会

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

    合适,private方法仅在该类中运行,可以保护一些重要代码不被更改。运用public方法访问其它代码。

  • 相关阅读:
    Linux上查找最大文件的 3 种方法
    不念过去,不畏将来
    Weblogic/WAS之Full GC监控与计算
    EntityFramework:An error occurred while executing the command definition. See the inner exception for details.
    1051 复数乘法(C#)
    BACnet开发资料与调试工具
    JS设置cookie、读取cookie、删除cookie
    认识BACnet协议
    Unity WebGL请求Http接口出现的Cors跨域问题
    VS 2017 产品密钥
  • 原文地址:https://www.cnblogs.com/2b-or-not-2b-/p/13766466.html
Copyright © 2020-2023  润新知