题目内容:
设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。
这个类的构造函数是:
Fraction(int a, int b)
构造一个a/b的分数。
这个类要提供以下的功能:
double toDouble();
将分数转换为double
Fraction plus(Fraction r);
将自己的分数和r的分数相加,产生一个新的Fraction的对象。注意小学四年级学过两个分数如何相加的哈。
Fraction multiply(Fraction r);
将自己的分数和r的分数相乘,产生一个新的Fraction的对象。
void print();
将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。
注意,在创建和做完运算后应该化简分数为最简形式。如2/4应该被化简为1/2。
Fraction类
public class Fraction{
实例域 numerator(分子) denominator(分母)
private final int numerator;
private final int denominator;
构造器(构造方法)
public Fraction(int numerator,int denominator)
{
this.numerator=numerator;
this.denominator=denominator;
}
构造方法可以有多个。不同于一般方法,构造方法有一些特殊的地方:
名称是固定的,与类名相同。这也容易理解,靠这个用户和Java系统就都能容易的知道哪些是构造方法。
没有返回值,也不能有返回值。这个规定大概是因为返回值没用吧。
通过构造方法,可以更为简洁的对实例变量进行赋值。
Fraction提供的方法
将分数转换成double
public double toDouble(Fraction x)
{
double res=(double)numerator / (double)denominator;
return res;
}
分数相加 将自己的分数和r的分数相加,产生一个新的Fraction的对象
Fraction plus(Fraction r)
{
int product=this.denominator * r.denominator;
int new_numerator=this.numerator * r.denominator + this.denominator * r.numerator;
int new_denominator=product;
Fraction x=new Fraction(new_numerator, new_denominator);
return x;
}
分数相乘 将自己的分数和r的分数相乘,产生一个新的Fraction的对象
Fraction multiply(Fraction r)
{
int new_numerator=this.numerator * r.numerator;
int new_denominator=this.denominator * r.denominator;
Fraction x=new Fraction(new_numerator, new_denominator);
return x;
}
将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。
当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。
注意,在创建和做完运算后应该化简分数为最简形式。如2/4应该被化简为1/2。
int k=1;
int gcd=1;
while (k <= numerator)
{
if ((numerator % k==0) && (denominator % k==0))
{
gcd=k;
}
k++;
}
if (numerator / gcd==1 && denominator / gcd==1)
{
System.out.println("1");
}
else
System.out.println((numerator / gcd) + "/" + (denominator / gcd));