有理数类的设计
1、有理数类的设计
package number;
public class Rational {
public int num;
public int denom;
public Rational(int num, int denom) {// 对有理数对象进行初始化
this.num = num;
this.denom = denom;
if(num==0&&denom==-1) {//若分子为零则直接返回
this.num=0;
this.denom=-1;
return;
}
if (denom == 0) {
System.err.println("分母不得为零");
return;
}
if (denom < 0) {// 将正负号设置到分子上
this.num = -num;
this.denom = -denom;
}
if (denom != 1) {// 若分母不为1则将分数化简
int a = Math.abs(num);
int b = Math.abs(denom);
int temp;
if (a < b) { // 保证被除数大于除数
temp = a;
a = b;
b = temp;
}
if (a % b != 0) {
while (a % b != 0) { // 在余数不为0时,进行循环
temp = a % b;
a = b;
b = temp;
}
}
this.num /= b;
this.denom /= b;
}
}
public void out() {// 输出有理数对象
System.out.println("(" + this.num + "," + this.denom + ")");
}
public Rational back() {
return new Rational(0,1);
}
public Rational plus(Rational number) {// 加法运算
int num = this.num * number.denom + number.num * this.denom;
int denom = this.denom * number.denom;
if(num==0)back();
return new Rational(num, denom);
}
public Rational subtract(Rational number) {// 减法运算
int num = this.num * number.denom - number.num * this.denom;
int denom = this.denom * number.denom;
if(num==0)back();
return new Rational(num, denom);
}
public Rational multiply(Rational number) {// 乘法运算
int num = this.num * number.num;
int denom = this.denom * number.denom;
if(num==0)back();
return new Rational(num, denom);
}
public Rational divide(Rational number) {// 除法运算
int num = this.num * number.denom;
int denom = this.denom * number.num;
if(num==0)back();
return new Rational(num, denom);
}
}
2、测试代码:
package test;
import number.Rational;
public class Test {
public static void main(String[] args) {
// 创建有理数对象
Rational sc = new Rational(2, -8);
Rational st = new Rational(-4, 8);
sc.out();
st.out();
// 有理数的运算
Rational sv = sc.plus(st);
sv.out();
sv = sc.subtract(st);
sv.out();
sv = sc.multiply(st);
sv.out();
sv = sc.divide(st);
sv.out();
}
}
4、尝试描述怎么与c语言的有理数代码相比较,为什么你设计的类更加面向对象?
在函数的编写、调用、类的实例化方面可以明显看出java是通过对象这一概念来完成各种调用、生成和计算的。
5a、别人如何复用你的代码?
package包的导入
5b、别人的代码是否依赖你的有理数类的属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?
依赖、有影响,包中类的属性经确立后,使用该类的其他类就只能使用该类有且仅有的属性和方法,不能对其修改。如属性修改后,别人调用时可能要根据修改的内容增加或删减参数才能实现调用
5c、有理数类的public方法是否设置合适?为什么有的方法设置为private?
根据访问权限和修改权限而定