有理数的设计

一.有理数类代码

package code;

public class RationalNum {
	private int Molecule;	//分子
	private int Denominator;	//分母
	
	public RationalNum(int Molecule, int Denominator) {
		this.Molecule = Molecule;
		this.Denominator = Denominator;
	}

	public int getMolecule() {
		return Molecule;
	}

	public void setMolecule(int molecule) {
		Molecule = molecule;
	}

	public int getDenominator() {
		return Denominator;
	}

	public void setDenominator(int denominator) {
		Denominator = denominator;
	}
	
	public	RationalNum addition(RationalNum N2) {	//加法
		int m=this.Molecule*N2.Denominator+N2.Molecule*this.Denominator;
		int d=this.Denominator*N2.Denominator;
		return new RationalNum(m,d);
	}
	
	public	RationalNum subtraction(RationalNum N2) {	//减法
		int m=this.Molecule*N2.Denominator-N2.Molecule*this.Denominator;
		int d=this.Denominator*N2.Denominator;
		return new RationalNum(m,d);
	}
	
	public	RationalNum multiplication(RationalNum N2) {	//乘法
		int m=this.Molecule*N2.Molecule;
		int d=this.Denominator*N2.Denominator;
		return new RationalNum(m,d);
	}
	
	public	RationalNum division(RationalNum N2) {	//除法
		int m=this.Molecule*N2.Denominator;
		int d=this.Denominator*N2.Molecule;
		return new RationalNum(m,d);
	}
	
	public boolean equals(RationalNum R2) {	//判断是否相等
		if(this.subtraction(R2).getMolecule()==0) 
			return true;
		else
			return false;
	}
	public int compareTo(RationalNum R2) {	//比较大小
		if(this.subtraction(R2).getMolecule()>0)
			return 1;
		else if(this.subtraction( R2).getMolecule()==0)
			return 0;
		else
			return -1;
	}
	
	public double doubleValue() {	//转换成double型
		return this.Molecule*1.0/this.Denominator;
	}
	
	public int intValue() {	//转换成int型
		return (int)doubleValue();
	}
	
	public long longValue() {	//转换成long型
		return (long)doubleValue();
	}
	
	public float floatValue() {	//转换成float型
		return (float)doubleValue();
	}
	
	public String toString() {	//转换成String型
		if(this.Denominator==1)
			return this.Molecule+" ";
		else
			return this.Molecule+"/"+this.Denominator;
	}
}

二.测试代码

package test;

import code.RationalNum;

public class Main {
	public static void main(String[] args) {
		RationalNum n1 = new RationalNum(5, 6);
		RationalNum n2 = new RationalNum(7, 8);
		System.out.println(n1.addition(n2));
		System.out.println(n1.subtraction(n2));
		System.out.println(n1.multiplication(n2));
		System.out.println(n1.division(n2));
		System.out.println(n1.equals(n2));
		System.out.println(n1.compareTo(n2));
		System.out.println(n1.toString());
		System.out.println(n1.doubleValue());
		System.out.println(n1.intValue());
		System.out.println(n1.longValue());
		System.out.println(n1.floatValue());
	}
}

运行结果截图

三.讨论

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

​ 因为c语言的有理数代码是面向程序的执行过程,而Java则是面向对象的,编写出一些功能性的代码,在运用时直接调用就行了。

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

​ 导入我所编写的有理数代码包。

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

​ 依赖;不影响。

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

​ 合适;因为有的方法不能随意更改,而且复杂,设为private就能避免许多麻烦。

posted @ 2020-10-04 17:29  王明け  阅读(51)  评论(0)    收藏  举报