有理数类设计

一.

有理数类代码

package java;

public class RationalNumber {
	private int numerator;//分子
    private int denominator;//分母
	public RationalNumber(int numerator,int denominator) {   //构造函数
		this.numerator=numerator;
		this.denominator=denominator;
	}
	public int getNumerator(){     //获取分子
		return this.numerator;
	}
	public int getDenominator(){   //获取分母
		return this.denominator;
	}
	public RationalNumber add(RationalNumber first,RationalNumber second) {               //加
		int num=first.numerator*second.denominator+second.numerator*first.denominator;
		int den=first.denominator*second.denominator;
		return new RationalNumber(num,den);
	
	}
	public RationalNumber sub(RationalNumber first,RationalNumber second) {               //减
		int num=first.numerator*second.denominator-second.numerator*first.denominator;
		int den=first.denominator*second.denominator;
		return new RationalNumber(num,den);
	
	}
	public RationalNumber mul(RationalNumber first,RationalNumber second) {               //乘
		int num=first.numerator*second.numerator;
		int den=first.denominator*second.denominator;
		return new RationalNumber(num,den);
	
	}
	public RationalNumber div(RationalNumber first,RationalNumber second) {               //除
		int num=first.numerator*second.denominator;
		int den=first.denominator*second.numerator;
		return new RationalNumber(num,den);
	
	}
	public boolean equal(RationalNumber first,RationalNumber second) {                    //判断是否相等
		if((first.numerator==second.numerator)&&(first.denominator==second.denominator)) {
			return true;
			}
		else {
			return false;
		}
		}
	public int intValue() {                //转换为int型
		return this.numerator/this.denominator;
	}
	public double doubleValue() {         //转换为double型
		return 1.0*this.numerator/this.denominator;
	}
	public float floatValue() {           //转换为float型
		return (float)doubleValue();
	}
	public long longValue() {             //转换为long型
		return (long)doubleValue();
	}
	public String toString() {
		if(this.denominator==1) {
			return this.numerator+" ";
		}
		else {
			return this.numerator+"/"+this.denominator;   //转换为字符串类型
		}
	}
}

二.

测试代码

import java.RationalNumber;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()) {
			int a=sc.nextInt(),b=sc.nextInt(),c=sc.nextInt(),d=sc.nextInt();
			RationalNumber S1=new RationalNumber(a,b);
			RationalNumber S2=new RationalNumber(c,d);
			RationalNumber S;
			S=S1.add(S1, S2);
			System.out.println("加法得到的有理数值为:"+S);
			S=S1.sub(S1, S2);
			System.out.println("减法得到的有理数值为:"+S);
			S=S1.mul(S1, S2);
			System.out.println("乘法得到的有理数值为:"+S);
			S=S1.div(S1, S2);
			System.out.println("除法得到的有理数值为:"+S);
		}
	}
	}

三.

讨论

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

c语言是面向过程的,还可以有独立于类的函数和全局变量存在,而面向对象有三大特征:封装性、继承性、多态性。面向对象的所有代码的基本单位都是类,所有函数和变量都必须存在于类中。

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

导入自己编写的有理数类

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

会依赖,不影响。

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

合适,private仅限于自己访问,经过它定义的变量只能在此对象内部调用,外部程序就无法调用,也就是说只能供其自身调用,保证了数据的安全性。

posted @ 2020-10-04 09:53  h_hhh  阅读(109)  评论(0编辑  收藏  举报