3.1-OO设计-有理数的设计
仿照BigDecimal类以面向对象的方式设计有理数类。
1. 给出你的完整的有理数类的代码。
package pta;
public class RationalNumber {
private double rationNumber;
double tempRationNumber = 0;
public double getRationNumber() {
return rationNumber;
}
public void setRationNumber(double rationNumber) {
this.rationNumber = rationNumber;
}
public void add(Double addNum) {
tempRationNumber = rationNumber + addNum;
System.out.println(toStr());
}//加运算
public void sub(Double subNum) {
tempRationNumber = rationNumber - subNum;
System.out.println(toStr());
}//减运算
public void mul(Double mulNum) {
tempRationNumber = rationNumber * mulNum;
System.out.println(toStr());
}//乘运算
public void div(Double divNum) {
tempRationNumber = rationNumber / divNum;
System.out.println(toStr());
}//除运算
public void rem(Double remNum) {
tempRationNumber = rationNumber % remNum;
System.out.println(toStr());
}//求余运算
public void sqrt() {
System.out.println(Math.sqrt(rationNumber));
}//有理数的开方
public void com(Double comNum) {
if(rationNumber > comNum)
System.out.println(rationNumber+" > "+comNum);
else if(rationNumber < comNum)
System.out.println(rationNumber+" < "+comNum);
else
System.out.println(rationNumber+" = "+comNum);
}//作比较
private String toStr() {
String str = ""+tempRationNumber;
return str;
}//Double转String类型
}
2. 给出你的测试代码。要在与有理数类不同包的其他类中调用有理数类。
package pta;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double number = sc.nextDouble();
double nextNum = sc.nextDouble();
RationalNumber firstNumber = new RationalNumber();
firstNumber.setRationNumber(number);
System.out.println("输入的第一个数是:"+firstNumber.getRationNumber());//测试输入的值是否正确
firstNumber.add(nextNum); //加运算
firstNumber.sub(nextNum); //减运算
firstNumber.mul(nextNum); //乘运算
firstNumber.div(nextNum); //除运算
firstNumber.rem(nextNum); //求余运算,number%nextNum
firstNumber.sqrt(); //根号number
firstNumber.com(nextNum); //将number与nextNum作比较
sc.close();
}
}
3. 尝试回答与c语言的有理数代码相比较,为什么你设计的类更加面向对象?
java具有封装、继承等这些核心特征,这些都是面向对象的经典特征,且可重用性高,可扩展性强。这些都是在学习C语言的时候不具有的
4. 别人如何复用你的代码?
他人可以在新类中创建RationalNumber类的对象,通过该对象来调用已有类中的非private的属性和方法。
5. 别人的代码是否依赖你的有理数类的内部属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?
依赖,并且当我的有理数属性需要修改时,会影响到他人调用我的有理数代码
6. 有理数类的public方法是否设置合适?为什么有的方法设置为private?
合适,private可以对类中的属性或方法起到保护作用,对于别的类来说,private是隐藏起来的
7. 你的类里面有static属性或方法吗?如果有,为什么要设置为static的?
没有