• OO设计-有理数类的设计


    1:代码

    package javaRationalNumber;
    
    public class RationalNumber {
    	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;
         if(r!=0)
         {
        	 return f(b,r);
         }
         return b;
        }
        RationalNumber add(RationalNumber r){//加法运算
            int a=r.getNum();
            int b=r.getDen();//得到分子分母
            int newNum=num*b+den*a;//分子等于两数的分子都乘以对方的分母再相加
            int newDen=den*b;//分母等于两个分母相乘
            RationalNumber result=new RationalNumber();//新的分数
            result.setNumAndDen(newNum,newDen);//再进行约分
            return result;
        }
         RationalNumber sub(RationalNumber r){//减法运算
            int a=r.getNum();
            int b=r.getDen();//得到分子分母
            int newNum=num*b-den*a;//分子等于两数的分子都乘以对方的分母再相减
            int newDen=den*b;//分母等于两个分母相乘
            RationalNumber result=new RationalNumber();//新的分数
            result.setNumAndDen(newNum,newDen);//再进行判断约分
            return result;      
        }
          RationalNumber muti(RationalNumber r){//乘法运算
            int a=r.getNum();
            int b=r.getDen();//得到分子分母
            int newNum=num*a;//分子等于两数的分子相乘
            int newDen=den*b;//分母都与两个分母相乘
            RationalNumber result=new RationalNumber();//新的分数
            result.setNumAndDen(newNum,newDen);//再进行判断约分
            return result;  
       
        }
           RationalNumber div(RationalNumber r){//除法运算
            int a=r.getNum();
            int b=r.getDen();//得到分子分母
            int newNum=num*b;//
            int newDen=den*a;//改为乘以倒数的形式
            RationalNumber result=new RationalNumber();//新的分数
            result.setNumAndDen(newNum,newDen);//再进行判断约分
            return result;     
        }
    }
    

    2 测试代码:

    public static void main(String[]args){
        	   RationalNumber r1=new RationalNumber();
        	   RationalNumber r2=new RationalNumber();//声明两个分数对象
               r1.setNumAndDen(4,5);
               int r1fenzi=r1.getNum();
               int r1fenmu=r1.getDen();//输入第一个分数并化简
               r2.setNumAndDen(4,2);
               int r2fenzi=r2.getNum();
               int r2fenmu=r2.getDen();//输入第一个分数并化简
               RationalNumber 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);
        
           }
    

    3 运行结果:

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

    c语言的使用依赖于许多自己设定的参数,并不方便直接使用,java代码则只需要对class进行调用,输入数据就可以使用,更面向对象。

    5:尝试从代码复用的角度来描述你设计的有理数类。从几个方面讨论。

    • a:在新类中创建RationalNumber类的对象,通过对象来调用类中非private的属性和方法。

    • b:依赖我的有理数类,修改我的有理数的属性对他人调用也有影响

    • c:设置为private是为了保护有些方法里的特殊赋值设为隐藏不被发现,从而不会被轻易修改,影响方法的正常计算。

  • 相关阅读:
    安装k8s和NVIDIA环境
    docker使用阿里云加速器
    Ubuntu16安装NVIDIA驱动后重复登录 简单粗暴
    Ubuntu TTY 字体大小 目录颜色 中文乱码 设置
    vim使用记录
    k8s内运行ubuntu容器
    IRelationalOperator接口
    IArea接口(计算多边形面积)
    ITopologicalOperator接口
    通过ArcEngine接口建立凸包(一)
  • 原文地址:https://www.cnblogs.com/Qq15005922929/p/13768411.html
Copyright © 2020-2023  润新知