• Java-有理数类设计


    一、有理数类代码
    package text;
    
    public class Rational {
    	private long numerator = 0;     //分子
    	private long denominator = 1;   //分母
    
    	public Rational() {             //构造函数
    		this(0,1);
    	}
    	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;
    	}
    	private long gcd(long numerator, long denominator) {
    		// TODO Auto-generated method stub
    		long n = Math.abs(numerator);
    		long d = 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 long getNumerator(){
    		return numerator;
    		}
    	public long getDenominator(){
    		return denominator;
    		}
    	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);
    		}
    	public int Compare(Rational s) {
    		if(numerator == s.getNumerator()) {          
                return 0;          //两数相等
            }
    		else if((numerator > s.getNumerator() && denominator <= s.getDenominator())||(numerator == s.getNumerator()&&nenominator < s.getDenominator())) {
                return 1;          //前者大于后者
            }
    		else {
                return -1;          //后者大于前者
            }
    	}
    		
    
    }
    
    二、测试代码
    package text;
    
    import text.Rational;
    
    public class Main {
    	public static void main(String[] args) {
    		Rational r1 = new Rational(8,9);
    		Rational r2 = new Rational(2,3); 
    		System.out.println("r1 + r2 = "+r1.add(r2).getNumerator()+'/'+r1.add(r2).getDenominator());
    		System.out.println("r1 - r2 = "+r1.subtract(r2).getNumerator()+'/'+r1.subtract(r2).getDenominator());
    		System.out.println("r1 * r2 = "+r1.multiply(r2).getNumerator()+'/'+r1.multiply(r2).getDenominator());
    		System.out.println("r1 / r2 = "+r1.divide(r2).getNumerator()+'/'+r1.divide(r2).getDenominator());
    		System.out.println("r1与r2比较结果:"+r1.Compare(r2)+"(0:r1=r2;1:r1>r2;-1:r1<r2)");
    
    	}
    }
    
    三、运行截图

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

    C语言倾向于编写全部代码,重过程;Java更倾向于将数据和方法进行封装和调用,更加灵活

    五、尝试从代码复用的角度来描述你设计的有理数类。从几个方面讨论。
    1. 别人如何复用你的代码?

      导入我的数据包

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

      依赖,调用了我的有理数类。

      不会,我的类属性修改,属于private型,不会影响他人调用。

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

      是。

      private型他人无法调用,保障了数据的安全性。

  • 相关阅读:
    接口测试和性能测试
    loadrunner总结
    loadrunner 基本操作
    loadrunner安装和应用
    qtp安装和使用
    Quality Center安装步骤
    JIRA的安装及配置
    testlink使用方法
    python3常用模块--熟练使用
    python2和python3差异
  • 原文地址:https://www.cnblogs.com/lim-M/p/13766758.html
Copyright © 2020-2023  润新知