有理数的设计
一.有理数类代码
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就能避免许多麻烦。

浙公网安备 33010602011771号