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

    有理数类的设计--Java

    1.有理数代码

    package rational;
    
    public class Rational {
    
    	private long Numerator = 0;
    	private long Denominator = 1;
    	
    	
    	//访问private中的Numerator和Denominator
    	public long getNumerator() {
    		return Numerator;
    	}
    	public long getDenominator() {
    		return Denominator;
    	}
    
    	
    	public Rational(long Numerator, long Denominator) {
    		// TODO Auto-generated constructor stub
    		long gcd = gcd(Numerator,Denominator);
    		long temp;
    		if(Denominator>0) {
    			temp = 1;
    		}else {
    			temp = -1;
    		}
    		this.Numerator = temp * 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);
    		long gcd = 1;
    		for (int i = 1; i < D&&i <= N; i++) {
    			if(N % i == 0&&D % i == 0) {
    				gcd = i;
    			}
    		}
    		return gcd;
    	}
    	
    	//加法
    	public Rational Add(Rational s) {
    		long N = Numerator * s.getDenominator() + Denominator * s.getNumerator();
    		long D = Denominator * s.getDenominator();
    		/*分子=分子1*分母2+分母1*分子2
    		 * 分母=分母1*分母2*/
    		return new Rational(N,D);
    	}
    	
    	//减法
    	public Rational Subt(Rational s) {
    		long N = Numerator * s.getDenominator() - Denominator * s.getNumerator();
    		long D = Denominator * s.getDenominator();
    		return new Rational(N,D);
    	}
    	
    	//乘法
    	public Rational Mult(Rational s) {
    		long N = Numerator * s.getNumerator();
    		long D = Denominator * s.getDenominator();
    		return new Rational(N,D);
    	}
    	
    	//除法
    	public Rational Divi(Rational s) {
    		long N = Numerator * s.getDenominator();
    		long D = Denominator * s.getNumerator();
    		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()&&Denominator < s.getDenominator())) {
    			return 1;//前者大于后者
    		}else {
    			return -1;//后者大于前者
    		}
    	}
    	
    	//转换为double类型
    	public double doubleValue(Rational s) {
    		double value = Numerator * 1.0 / Denominator;
    		return value; 
    	}
    }
    
    

    2.测试代码

    package rational;
    
    import rational.Rational;
    
    public class Main {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Rational ra1 = new Rational(5,21);
    		Rational ra2 = new Rational(2,7);
    		
    		System.out.println("ra1转换为double型的值为:"+ra1.doubleValue(ra1));
    		System.out.println("ra2转换为double型的值为:"+ra2.doubleValue(ra2));
    		System.out.println("ra1 + ra2 = "+ra1.Add(ra2).getNumerator()+'/'+ra1.Add(ra2).getDenominator());
    		System.out.println("ra1 - ra2 = "+ra1.Subt(ra2).getNumerator()+'/'+ra1.Subt(ra2).getDenominator());
    		System.out.println("ra1 * ra2 = "+ra1.Mult(ra2).getNumerator()+'/'+ra1.Mult(ra2).getDenominator());
    		System.out.println("ra1 / ra2 = "+ra1.Divi(ra2).getNumerator()+'/'+ra1.Divi(ra2).getDenominator());
    		System.out.println("ra1与ra2相比较的结果为:"+ra1.Compare(ra2)+"   (1:前者大于后者;0:二者相等;-1:后者大于前者)");
    
    	}
    }
    
    

    3.运行结果截图

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

    C语言是一种通用的、面向过程式的加算计程序设计语言,是仅产生少量的机器语言以及不需要腾和运行环境支持便能运行的。Java是面向对象编程,它利用了类和对象编程。类是对于事物的抽象,对象是具体的一个事物。

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

    a.别人如何复用你的代码?

    导入我的代码数据包,并且在首行import调用我的代码数据包。

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

    ​ 别人的代码会依赖我的有理数类的属性。当我的有理数类的属性修改时,不会影响其他人对我有理数类代码的调用,因为属性的修饰类型为private型。

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

    ​ 合适。因为设置为private型,他人就不能在其他的类中使用和修改,对代码有一定的保护作用。

  • 相关阅读:
    自动发送邮件功能
    工作中常用的Android系统ADB命令收集
    商城系统必须知道的【订单、优惠金额、退货、实际营收】解释
    商城系统项目必须知道的专业数据指标
    接口加密思路
    Selenium使用Chrome模拟手机浏览器方法解析
    PHP上传图片基本代码示例
    iframe子页面获取父页面的点击事件
    javascript实现网页倒计时效果
    Crontab常用命令总结
  • 原文地址:https://www.cnblogs.com/hcy420/p/13765577.html
Copyright © 2011-2022 走看看