有理数的四则运算(java版)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41291067/article/details/102491907

1、题目描述

创建Java程序,进一步学习上述的内容以及关键字this的使用和类抽象的概念。程序要求:
(1)首先创建有理数类Rational,该类包含构造方法和加、减、乘、除方法。
(2)程序主方法中创建两个有理数对象,分别进行加、减、乘、除运算,并输出运算结果。

3、思路:

(1)按照要求创建一个有理数类Rational,应包含2个私有的长整型数据成员numerator和denominator分别存储一个有理数的分子和分母;该类应包含不带参数的构造方法,和带参数的构造方法。其中不带参数的构造方法把有理数的分子和分母初始化为0和1;带参数的构造方法中应对该有理数进行约分,为此需为该类创建一个成员方法private long gcd(long n, long d);该方法返回分子和分母的最大公约数。
(2)为理数类Rational创建四个成员方法分别实现2个有理数的加、减、乘、除运算,四个方法的方法签名如下:
public Rational add(Rational secondRational);
public Rational subtract(Rational secondRational);
public Rational multiply(Rational secondRational);
public Rational divide(Rational secondRational);
(3)为Rational类改写toString()方法,该方法改写后的功能是:以分数的形式输出一个有理数。例如:2/3
(4)创建一个类TestRationalClass,该类中分别创建2个Rational类的对象r1和r2,计算并显示它们的和、差、积、商。

3、详细代码:

public class course3_2 {
	public static void main(String[] args) {
		Rational r1 = new Rational(2,1);
		Rational r2 = new Rational(2,3);
		System.out.println(r1.toString()+"+"+r2.toString()+"="+(r1.add(r2)).toString());
		System.out.println(r1.toString()+"-"+r2.toString()+"="+(r1.subtract(r2)).toString());
		System.out.println(r1.toString()+"*"+r2.toString()+"="+(r1.multiply(r2)).toString());
		System.out.println(r1.toString()+"/"+r2.toString()+"="+(r1.divide(r2)).toString());
	}
}
class Rational{
	private long numerator;
	private long denominator;
	public long getNumerator() {
		return numerator;
	}
	public void setNumerator(long numerator) {
		this.numerator = numerator;
	}
	public long getDenominator() {
		return denominator;
	}
	public void setDenominator(long denominator) {
		this.denominator = denominator;
	}
	public Rational() {
		super();
		this.numerator = 0;
		this.denominator = 1;
	}
	public Rational(long numerator, long denominator) {
		super();
		long gcd = gcd(numerator,denominator);
		this.numerator = numerator/gcd;
		this.denominator = denominator/gcd;
	}
	private long gcd(long n, long d) {
		long s1 = Math.abs(n);
		long s2 = Math.abs(d);
		long remander = s1%s2;
		while(remander!= 0) {
			s1 = s2;
			s2 = remander;
			remander = s1%s2;
		}
		return s2;
	}
	public Rational add(Rational secondRational) {
		long n = numerator*secondRational.getDenominator()+denominator*secondRational.getNumerator();
		long d = denominator*secondRational.getDenominator();
		System.out.println(n+" "+d);
		return new Rational(n,d);
	}
	public Rational subtract(Rational secondRational) {
		long n = numerator*secondRational.getDenominator()-denominator*secondRational.getNumerator();
		long d = denominator*secondRational.getDenominator();
		return new Rational(n,d);
	}
	public Rational multiply(Rational secondRational) {
		long n = numerator*secondRational.getNumerator();
		long d = denominator*secondRational.getDenominator();
		return new Rational(n,d);
	}
	public Rational divide(Rational secondRational) {
		long n = numerator*secondRational.getDenominator();
		long d = denominator*secondRational.getNumerator();
		return new Rational(n,d);
	}
	public String toString() {
		if(denominator == 1) {
			return numerator+"";
		}
		else {
			return numerator+"/"+denominator;
		}
	}
}

4、输出结果:

2+2/3=8/3
2-2/3=4/3
2*2/3=4/3
2/2/3=3

5、总结

本题主要要求我们掌握类中私有变量的封装以及构造方法的应用。难点在于找到两个数的公约数(gcd方法)。同时有理数的输入和输出要注意“/”的位置。

猜你喜欢

转载自blog.csdn.net/qq_41291067/article/details/102491907
今日推荐