设计一个表示分数的类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是一个正确的输出
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Fraction a = new Fraction(in.nextInt(), in.nextInt());
Fraction b = new Fraction(in.nextInt(),in.nextInt());
a.print();
b.print();
a.plus(b).print();
a.multiply(b).plus(new Fraction(5,6)).print();
a.print();
b.print();
in.close();
}
}
class Fraction{
//实例域 numerator(分子) denominator(分母)
private final int numerator;
private final int denominator;
//构造器
public Fraction(int numerator,int denominator) {
// TODO Auto-generated constructor stub
this.numerator=numerator;
this.denominator=denominator;
}
//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。 */
void print()
{
if(numerator==1)
{
if(denominator==1)
System.out.println("1");
else
System.out.println("1"+"/"+denominator);
}
else
{
//求分子分母最大公约数
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));
}
}
}