第一周编程作业

本文介绍了一个用于表示分数的Java类的设计方法。该类包括基本的分数运算,如加法、乘法及分数的打印功能。文章还展示了如何通过实例化分数对象并执行这些操作来使用此类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计一个表示分数的类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));
        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值