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的?

没有

posted @ 2021-09-27 20:58  Y-smile  阅读(52)  评论(1编辑  收藏  举报