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

    一、给出你的有理数类的代码。

    package rational;
    
    public class Rational {
    	private int numerator;    //分子
        private int denominator;    //分母
    
        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 static int gcd(int numerator,int denominator){    //greatest common divisor gcd返回最大公约数
        	int Numerator = Math.abs(numerator);
        	int Denominator = Math.abs(denominator);
        	int gcd = 1;
            for (int i = 1; i<= Numerator && i <= Denominator; i++) {
        		if (Numerator % i == 0 &&  Denominator % i == 0)
        			gcd = i;
        	}
            return gcd;
      }
        
        public Rational()    //无参构造函数
        {
            this.numerator=0;
            this.denominator=1;
        }
    
        public int getNumerator()    //获取分子
        {
            return this.numerator;
        }
        
        public int getDenominator()    //获取分母
        {
            return this.denominator;
        }
        
        public Rational add(Rational next) {    //两数相加
        	int N = this.numerator * next.denominator + this.denominator * next.numerator;
        	int D = this.denominator * next.denominator;
        	return new Rational(N ,D);
        }
    
        public Rational subtract(Rational next) {    //两数相减
        	int N = this.numerator * next.denominator - this.denominator * next.numerator;
        	int D = this.denominator * next.denominator;
        	return new Rational(N ,D);
        }
    
        public Rational multiply(Rational next) {    //两数相乘
        	int N = this.numerator * next.numerator;
        	int D = this.denominator * next.denominator;
        	return new Rational(N ,D);
        }
    
        public Rational divide(Rational next) {    //两数相除
        	int N = this.numerator * next.denominator;
        	int D = this.denominator * next.numerator;
        	return new Rational(N ,D);
        }
    
        public int intValue(){    //返回整数
            return (int)this.numerator/this.denominator;
        }
     
        public double doubleValue(){    //返回浮点数
            return (double)this.numerator*1.0/this.denominator;
        }
        
        public String toString(){    //返回字符串
            return numerator+"/"+denominator;
        }
    }
    
    

    二、测试代码。

    package rational;
    import rational.Rational;
    
    public class Main {
    	public static void main(String[] args) {
    		Rational test1 = new Rational(1,3);
            Rational test2 = new Rational(-2,5);
            
            System.out.println("test1 + test2 = "+test1.add(test2));
            System.out.println("test1 - test2 = "+test1.subtract(test2));
            System.out.println("test1 * test2 = "+test1.multiply(test2));
            System.out.println("test1 / test2 = "+test1.divide(test2));
            System.out.println("测试一的整型部分为: :" + test1.intValue());
            System.out.println("测试二的浮点型为::" + test2.doubleValue());
            System.out.println("测试二转化为字符串为:" + test2.toString());
    	}
    }
    
    

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

    • c语言和Java都为编程语言,c语言侧重过程,java中的类更侧重对象的操作。c语言更倾向于过程,Java倾向对对象的处理,例如a、b两数相加,c语言add(a,b),Java为a.add(b)。
    • Java更面对对象,在实际操作的时候可以很方便直接调用。

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

    导入rational包即可使用

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

    依赖,有理数类的属性被修改会影响调用有理数的代码,可能会出错。

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

    public是公共的,private是私有的用于声明类和成员的可见性。public可以被其他代码调用,所以设置为pubilc方法合适。有的方法设置为private,别的代码就难以访问该private,以此来控制代码的访问。

  • 相关阅读:
    uva11552
    zoj3820 树的直径+二分
    hdu 5068 线段树加+dp
    zoj3822
    uva1424
    DAY 36 前端学习
    DAY 35 前端学习
    DAY 34 PYTHON入门
    DAY 33 PYTHON入门
    DAY 32 PYTHON入门
  • 原文地址:https://www.cnblogs.com/ssp1781554770/p/13766714.html
Copyright © 2011-2022 走看看