以面向对象的方式设计有理数类

1.有理数类的代码

package main;

public class Rational {
	private int Numerator;// 分子
	private int Denominator;// 分母

	public Rational(int Numerator, int Denominator) { // 构造函数
		this.Numerator = Numerator;
		this.Denominator = Denominator;
	}

	public int getNumerator() { // 获取分子
		return Numerator;
	}

	public void setNumerator(int numerator) {
		Numerator = numerator;
	}

	public int getDenominator() { // 获取分母
		return Denominator;
	}

	public void setDenominator(int denominator) {
		Denominator = denominator;
	}

	public Rational addition(Rational X) { // 加法
		int a = this.Numerator * X.Denominator + X.Numerator * this.Denominator;
		int b = this.Denominator * X.Denominator;
		return new Rational(a, b);
	}

	public Rational subtraction(Rational X) { // 减法
		int a = this.Numerator * X.Denominator - X.Numerator * this.Denominator;
		int b = this.Denominator * X.Denominator;
		return new Rational(a, b);
	}

	public Rational multiplication(Rational X) { // 乘法
		int a = this.Numerator * X.Numerator;
		int b = this.Denominator * X.Denominator;
		return new Rational(a, b);
	}

	public Rational division(Rational X) { // 除法
		int a = this.Numerator * X.Denominator;
		int b = this.Denominator * X.Numerator;
		return new Rational(a, b);
	}

	public int compareTo(Rational X) { // 比较大小
		if (this.subtraction(X).getNumerator() > 0)
			return 1;// 大于
		else if (this.subtraction(X).getNumerator() == 0)
			return 0;// 等于
		else
			return -1;// 小于
	}

	public String toString() { // 转换成String型,输出Rational类默认转换为该型
		if (this.Denominator == 1)
			return this.Numerator + " ";
		else
			return this.Numerator + "/" + this.Denominator;
	}

	public double doubleValue() { // 转换成double型
		return 1.0 * this.Numerator / this.Denominator;
	}

	public int intValue() { // 转换成int型
		return (int) doubleValue();
	}

	public long longValue() { // 转换成long型
		return (long) doubleValue();
	}
}

2.测试代码

package main;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.println("输入两个数字构成有理数分数");
		Rational a = new Rational(in.nextInt(), in.nextInt());
		System.out.println("输入两个数字构成有理数分数");
		Rational b = new Rational(in.nextInt(), in.nextInt());
		System.out.println("两有理数相加的结果为:" + a.addition(b));
		System.out.println("两有理数相减的结果为:" + a.subtraction(b));
		System.out.println("两有理数相乘的结果为:" + a.multiplication(b));
		System.out.println("两有理数相除的结果为:" + a.division(b));
		System.out.println("两有理数比较大小的结果为:" + a.compareTo(b) + " (大于时输出1,等于时输出0,小于时输出-1)");
		System.out.println("把第一个有理数转换成字符串型:" + a.toString());
		System.out.println("把第一个有理数转换成double型:" + a.doubleValue());
		System.out.println("把第一个有理数转换成int型:" + a.intValue());
		System.out.println("把第一个有理数转换成long型:" + a.longValue());
	}
}

3.尝试回答与c语言的有理数代码相比较,为什么你设计的类更加面向对象?

我设计的类通过创建不同的属性和方法,将功能分装进对象,再通过调用其方法来实现所需功能;而在使用c语言时,需要通过编写不同的函数并调用它们来实现相应功能。

4.从代码复用的角度来描述你设计的有理数类。从几个方面讨论

(1)别人如何复用你的代码?

别人在复用我的代码时,需要导入我所写的包中的有理数类。

(2) 别人的代码是否依赖你的有理数类的内部属性?当你升级了你的有理数类,将其的属性名改变时。是否会影响他人以前编写的调用你有理数类的代码(假设他将使用了你升级后有理数类)?

别人的代码依赖于我的有理数类的属性。

由于我的有理数类的属性使用private进行了封装,所以当我的有理数类的属性修改时,不会影响他人调用我的有理数代码。

(3)有理数类的public方法是否设置合适?为什么有的方法设置为private?

有理数类的public方法设置合适。

有的方法设置为private,别的类就不能通过该private方法访问该变量,可对类中的属性或方法起到保护作用。

(4)你的类里面有static属性或方法吗?如果有,为什么要设置为static的?

我的类中不含static属性或方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值