7-3 设计分数类-TestFraction (pta java练习题 设计一个分数类,完成相加和相乘及判相等的方法。 以下是分数测试主类,请不要修改main方法也不要在主类中添加其他方法。)

由于pta上的main方法有更新,前面发的代码不能用了,现已更新如下

设计一个分数类,完成相加和相乘及判相等的方法。 以下是分数测试主类,请不要修改main方法也不要在主类中添加其他方法。你只需要复制主类代码并补充其他类的定义,使其通过主类的测试。详见main方法代码及注释。

输入格式:

有n组测试用例。 每组测试用例从标准输入读取一行四个整数到 n1,d1,n2,d2,分别表示两个分数的分子和分母。 -1000<=n1,n2,d1,d2<=1000 && d1,d2 !=0

输出格式:

对每一组输入,在一行中输出两个分数相加、相乘及判断是否相等。 请参考main方法代码及样例输出。 相加、相乘的结果要约分。

输入样例:

在这里给出一组输入。例如:

1 2 3 4
2 4 4 8

输出样例:

在这里给出相应的输出。例如:

(1/2) + (3/4)=(5/4)    (1/2) x (3/4)=(3/8)    (1/2) == (3/4): false
(2/4) + (4/8)=(1)    (2/4) x (4/8)=(1/4)    (2/4) == (4/8):  true
import java.util.Scanner;

public class Main {

        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            while (sc.hasNext()) {
                int n1 = sc.nextInt();
                int d1 = sc.nextInt();
                int n2 = sc.nextInt();
                int d2 = sc.nextInt();
                Fraction f1 = new Fraction(n1, d1);
                Fraction f2 = new Fraction(n2, d2);
                System.out.printf("%1$s + %2$s=%3$s\t", f1, f2, f1.fAdd(f2));
                System.out.printf("%1$s x %2$s=%3$s\t", f1, f2, f1.fMultiply(f2));
                System.out.printf("%1$s == %2$s:%3$6b\n", f1, f2, f1.equals(f2));
        }
    }
}


class Fraction{

    private int n;
    private int d;

    public Fraction() {
    }

    public Fraction(int n, int d) {
        this.n = n;
        this.d = d;
    }

    private int Max(int a, int b){

        int temp;
        if(a < b){
            temp = a;
            a = b;
            b = temp;
        }
        while(b!=0){
            temp = b;
            b = a%b;
            a = temp;
        }
        return a;
    }

    public Object fAdd(Fraction f2) {
        Fraction f3 = new Fraction();
        f3.d = this.d * f2.d;
        f3.d = f3.d/Max(this.d, f2.d);
        f3.n = this.n * (f3.d/this.d) + f2.n*(f3.d/f2.d);
        int a = Max(f3.n, f3.d);
        if (f3.d < 0 && f3.d != -1 ){
            f3.d = -f3.d;
            f3.n = -f3.n;
        }
        f3.n = f3.n/a;
        f3.d = f3.d/a;
        return f3;
    }

    public Object fMultiply (Fraction f2) {
        Fraction f3 = new Fraction();
        f3.n = this.n * f2.n;
        f3.d = this.d * f2.d;
        int a = Max(f3.n, f3.d);
        f3.n = f3.n/a;
        f3.d = f3.d/a;
        if (f3.d < 0){
            f3.d = -f3.d;
            f3.n = -f3.n;
        }
        return f3;
    }

    @Override
    public String toString() {
        if (d < 0) {
            d = -d;
            n = -n;
        }
        if(d==1&&n!=0){
            return "("+n+")";
        }else if(n==d&&n!=0){
            return "(1)";
        } else if(n == 0){
            return "(0)";
        }else {
            return "(" +
                    n +
                    "/" + d +
                    ')';
        }
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Fraction f3 = (Fraction) o;
        int a = Max(f3.n, f3.d);
        int n1 = f3.n;int d1 =f3.d;
        n1 = f3.n/a;
        d1 = f3.d/a;
        int b = Max(n, d);
        int n2 = n;int d2 = d;
        n2 = n/b;
        d2 = d/b;
        return n2 == n1 &&
                d2 == d1;
    }

}
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值