zoukankan      html  css  js  c++  java
  • OO设计-有理数类的设计

    有理数类代码

    public class Rational {
    	int num;
        int den;
        void setNumAndDen(int fenzi,int fenmu){
            int m=1,n=1;
            if(fenzi<0)
                m=-1*fenzi;
            if(fenmu<0)
                n=-1*fenmu;
            if(fenzi==0){
                num=0;
                den=1;
                return ;
            }              
            int c=f(m,n);//把输入的分数进行约分
            num=fenzi/c;
            den=fenmu/c;
            if(num<0&&den<0){
                num=-num;
                den=-den;//如果分子和分母都是负的,那就转换为正的
            }
        }
        int getNum(){
            return num;    
        }
        int getDen(){
            return den;
        }
        int f(int a,int b){
            if(a<b){
            int c=a;
            a=b;
            b=c;   
            }//转换使运算的时候a是最大的再进行求最大公约数
         int r=a%b;
         while(r!=0){
             a=b;
             b=r;
             r=a%b;
         }
            return b;
        }
        Rational add(Rational r){//加法运算
            int a=r.getNum();
            int b=r.getDen();//得到分子分母
            int newNum=num*b+den*a;//分子等于两数的分子都乘以对方的分母再相加
            int newDen=den*b;//分母等于两个分母相乘
            Rational result=new Rational();//新的分数
            result.setNumAndDen(newNum,newDen);//再进行约分
            return result;
        }
         Rational sub(Rational r){//减法运算
            int a=r.getNum();
            int b=r.getDen();//得到分子分母
            int newNum=num*b-den*a;//分子等于两数的分子都乘以对方的分母再相减
            int newDen=den*b;//分母等于两个分母相乘
            Rational result=new Rational();//新的分数
            result.setNumAndDen(newNum,newDen);//再进行判断约分
            return result;      
        }
          Rational muti(Rational r){//乘法运算
            int a=r.getNum();
            int b=r.getDen();//得到分子分母
            int newNum=num*a;//分子等于两数的分子相乘
            int newDen=den*b;//分母都与两个分母相乘
            Rational result=new Rational();//新的分数
            result.setNumAndDen(newNum,newDen);//再进行判断约分
            return result;  
       
        }
           Rational div(Rational r){//除法运算
            int a=r.getNum();
            int b=r.getDen();//得到分子分母
            int newNum=num*b;//
            int newDen=den*a;//改为乘以倒数的形式
            Rational result=new Rational();//新的分数
            result.setNumAndDen(newNum,newDen);//再进行判断约分
            return result;     
        }
    }
    

    测试代码

     public static void main(String[]args){
               Rational r1=new Rational();
               Rational r2=new Rational();//声明两个分数对象
               r1.setNumAndDen(3,5);
               int r1fenzi=r1.getNum();
               int r1fenmu=r1.getDen();//输入第一个分数并化简
               r2.setNumAndDen(3,2);
               int r2fenzi=r2.getNum();
               int r2fenmu=r2.getDen();//输入第二个分数并化简
               Rational result=r1.add(r2);
               int resultFenzi=result.getNum();
               int resultFenmu=result.getDen();//得到结果
               System.out.printf("
    %d/%d+%d/%d=%d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu);
               result=r1.sub(r2);//减法
               resultFenzi=result.getNum();
               resultFenmu=result.getDen();
               System.out.printf("
    %d/%d-%d/%d=%d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu);
               result=r1.muti(r2);//乘法
               resultFenzi=result.getNum();
               resultFenmu=result.getDen();
               System.out.printf("
    %d/%d*%d/%d=%d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu);
               result=r1.div(r2);//除法
               resultFenzi=result.getNum();
               resultFenmu=result.getDen();
               System.out.printf("
    %d/%d/%d/%d=%d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu);
        
           }
    

    运行样例

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

    • 语言的代码首先会从函数功能的实现来考虑,java是将数据和处理作为一个整体,将函数与属性放在一起,更易于维护。

    别人如何复用你的代码

    • 继承

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

    • 依赖,当有理数属性修改为其他类型的属性时,会影响其他人调用

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

    • 合适,对于其他类来说是隐藏的,可以保护方法中的赋值不被外界干扰
  • 相关阅读:
    Shell编程进阶 1.2 shell结构及执行
    LNMP 1.6 常见的502问题解决
    关于贴图看不到。显示是白色或者其他。
    windows 任务栏图标宽度固定
    Install Oracle Java JDK/JRE 7u55 on Fedora 20/19, CentOS/RHEL 6.5/5.10
    盘点天龙历史:七年以来所有资料片
    linux shell 逻辑运算符、逻辑表达式详解
    vim 把满足条件的数字进行加上一些数字
    win7 一些快捷系统工具命令
    Linux下用C读取配置文件。类似ini这样。
  • 原文地址:https://www.cnblogs.com/xingyufen/p/13768323.html
Copyright © 2011-2022 走看看