类与对象的学习

@spiritree  August 7, 2016

题目内容:
设计一个表示分数的类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));

添加新评论