有理数设计

1、代码

public class RationalNumber {
	private String numString;
	private int numerator;
	private int denominator;
	private int pointIndex;
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		StringBuilder toToString = new StringBuilder();
		toToString.append(this.numerator / this.denominator);
		toToString.append('.');
		toToString.append(this.numerator % this.denominator);
		return toToString.toString();
	}
	public int getNumerator() {
		return numerator;
	}
	public int getDenominator() {
		return denominator;
	}	
	//无参构造法
	public RationalNumber() {
		// TODO Auto-generated constructor stub
		this.numString = "0.0";
		this.pointIndex = 1;
		this.numerator = 0;
		this.denominator = 1;
	}
	//字符串构造法
	public RationalNumber(String numStr) {
		this.numString = numStr;
		this.pointIndex = numStr.lastIndexOf('.') ;
		this.denominator = (int) Math.pow(10, this.pointIndex - 1);
		String tmpString = numStr.substring(0, this.pointIndex) + numStr.substring(this.pointIndex+1, numStr.length());
		this.numerator = Integer.parseInt(tmpString);
	}	
	public String getNumString() {
		return numString;
	}
	public int getPointIndex() {
		return pointIndex;
	}
	//分子分母构造法
	private RationalNumber(int numerator, int denominator){
		this.numerator = numerator;
		this.denominator = denominator;
	    this.numString = toString();
	    this.pointIndex = numString.lastIndexOf('.');
	}
	
	//相加
	public RationalNumber add(RationalNumber toNumber) {
		 int minCommonMultiple = minCommonMultiple(this.denominator, toNumber..getDenominator());
		 int newNumerator = (minCommonMultiple/this.denominator) * this.numerator +
				 (minCommonMultiple/toNumber.getDenominator()) * toNumber.getNumerator();
		 return new RationalNumber(newNumerator, minCommonMultiple);
	}
	//相减
	public RationalNumber subtract(RationalNumber toNumber)
        {
              int newNumerator = this.numerator * toNumber.getDenominator() - this.denominator * toNumber.getNumerator();
              int newDenuminator = this.denominator * toNumber.getDenominator();
              return new RationalNumber(newNumerator, newDenuminator);
        }
	//相乘
        public RationalNumber multiply(RationalNumber toNumber)
        {
              int newNumerator = this.numerator * toNumber.getNumerator();
              int newDenuminator = this.denominator * toNumber.getDenominator();
              return new RationalNumber(newNumerator,newDenuminator);
        }
        //相除
        public RationalNumber divide(RationalNumber toNumber)
        {
              int newNumerator = this.numerator * toNumber.getDenominator();
              int newDenuminator = this.denominator * toNumber.getNumerator();
              return new RationalNumber(newNumerator, newDenuminator);
        }    
	//最小公倍数
	public static int minCommonMultiple(int m, int n) {
		return m * n / gcd(m, n);
	}	
	//最大公约数
	public static int gcd(int n,int d){
        int n1=Math.abs(n);
        int n2=Math.abs(d);
        int tmp;
        while (n2 != 0) {
            tmp = n1 % n2;
            n1 = n2;
            n2 = tmp;
        }
        return n1;
    }
}

2、测试代码

3、测试结果

4、讨论

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

导入我的有理数类包

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

会依赖,会影响到

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

合适,private方法仅在该类中提供给代码编写者,可以保护一些重要代码不被使用者更改。public方法提供给使用者安全调用代码。

原文地址:https://www.cnblogs.com/zx224569/p/13766865.html