从零开始的java生活(刷题篇6)

上机题

        1. 带分数运算

【问题描述】利用已有分数类(Fraction)设计带分数类(MixedFration)(表示形式为a[b/c],其中a为整数部分,b为分子,c为分母),添加或者重写必要的属性和方法,以输出正确结果。其中Test类和Fraction类已经定义,只须提交包含MixedFration类的MixedFration.java文件,主类名填写为Test。

【输入形式】无
【输出形式】带分数的运算结果仍为带分数,表示为“3[1/2]”,对应分数为“7/2”,若整数部分为0,则表示为“1/2”,若“-3[1/2]”则对应分数为“-7/2”。参照样例输出
【样例输入】无
【样例输出】

2[5/6]

3[7/9]

-3[5/6]

-2[7/8]

【样例说明】无
【评分标准】结果正确,满分。

提供的Test类和Fraction类如下:

public class Test {
    public static void main(String[] args) {
        MixedFraction a = new MixedFraction (1,1,2);
        MixedFraction b = new MixedFraction (1,1,3);
        a.jia(b);
        System.out.println(a);
        a.cheng(b);
        System.out.println(a);
        MixedFraction c = new MixedFraction (-2,1,2);
        MixedFraction d = new MixedFraction (1,1,3);
        c.jian(d);
        System.out.println(c);
        c.chu(d);
        System.out.println(c);

    }
}

class Fraction {
    private int fenZi;
    private int fenMu;
    public Fraction() {
    }
    public Fraction(int fenZi, int fenMu) {
        super();
        this.fenZi = fenZi;
        this.fenMu = fenMu;
    }
    public int getFenZi() {
        return fenZi;
    }
    public void setFenZi(int fz) {
        this.fenZi = fz;
    }
    public int getFenMu() {
        return fenMu;
    }
    public void setFenMu(int fm) {
        this.fenMu = fm;
    }
    public void huaJian() {
        if (fenZi == 0) {
            fenMu = 1;
        }
        int yueshu = getYueshu();
        if (fenMu > 0) {
            fenZi /= yueshu;
            fenMu /= yueshu;
        } else {
            fenZi /= -yueshu;
            fenMu /= -yueshu;
        }
    }
    private int getYueshu() {
        int a = Math.abs(fenZi);
        int b = Math.abs(fenMu);
        int smaller = Math.min(a, b);
        for (int i = smaller; i > 1; i--) {
            if (a % i == 0 && b % i == 0) {
                return i;
            }
        }
        return 1;
    }
    public String toString() {
        if (fenMu == 1) {
            return fenZi + "";
        }
        return fenZi + "/" + fenMu;
    }
    public void jia(Fraction a) {
        this.fenZi = this.fenZi * a.getFenMu() + a.getFenZi() * this.fenMu;
        this.fenMu = this.fenMu * a.getFenMu();
    }
}

编写的MixedFration类如下:

public class MixedFration {

}
class  MixedFraction extends Fraction{
    private int zengShu;
    public MixedFraction(int zengShu,int fenZi,int fenMu){
        super(fenZi, fenMu);
        if(zengShu>=0)
            setFenZi(zengShu*getFenMu()+getFenZi());
        else
            setFenZi(zengShu*getFenMu()-getFenZi());
        transform();
    }
    public void transform(){
        if(zengShu>=0)
            setFenZi(zengShu*getFenMu()+getFenZi());
        else
            setFenZi(zengShu*getFenMu()-getFenZi());
    }
    public int getZengShu() {
        return zengShu;
    }
    public void setZengShu(int zengShu) {
        this.zengShu = zengShu;
    }
    public void jia(MixedFraction a){

        transform();
        setFenZi(getFenZi()* a.getFenMu() + a.getFenZi() * getFenMu());
        setFenMu(getFenMu() * a.getFenMu());
    }
    public void cheng(MixedFraction a) {

        transform();
        setFenZi(getFenZi()*a.getFenZi());
        setFenMu(getFenMu()*a.getFenMu());
    }
    public void jian(MixedFraction a) {

        transform();
        setFenZi(getFenZi()* a.getFenMu() - a.getFenZi() * getFenMu());
        setFenMu(getFenMu() * a.getFenMu());
    }
    public void chu(MixedFraction a) {

        transform();
        setFenZi(getFenZi()*a.getFenMu());
        setFenMu(getFenMu()*a.getFenZi());
    }
    public void huaJian(){
        super.huaJian();
        setZengShu( getFenZi() / getFenMu() );
        setFenZi( Math.abs(getFenZi() % getFenMu()) );
    }
    public String toString(){
        huaJian();
        if(getZengShu()!=0)
            return getZengShu()+"["+ super.toString() +"]";
        else
            return "["+ super.toString() +"]";
    }
}

博主java萌新,有问题可评论区共同交流学习,欢迎大家交流awa

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值