zoukankan      html  css  js  c++  java
  • 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型他人无法调用,保障了数据的安全性。

  • 相关阅读:
    23.java方法的深入
    MapReduce:详解Shuffle过程
    Hadoop1.x与Hadoop2的区别
    进程控制的一些api
    程序的静态链接,动态链接和装载
    用户级线程和内核级线程的区别
    从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)
    海量处理面试题
    面试中的二叉树题目
    linux 进程间消息队列通讯
  • 原文地址:https://www.cnblogs.com/lim-M/p/13766758.html
Copyright © 2011-2022 走看看