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方法)。同时有理数的输入和输出要注意“/”的位置。