如何开始关于有理数的Java作业?

时间:2016-03-20 17:09:38

标签: java

这是我的作业:

  

创建一个名为Rational的类,用于执行使用分数的算术。写一个程序来测试你的课程。使用整数变量来表示类的私有实例变量 - 分子和分母。

     

提供一个构造函数,使该类的对象在声明它时被初始化。构造函数应该以简化形式存储分数。分数2/4相当于1/2,并且将在对象中存储为分子中的1和分母中的2。如果未提供初始值设定项,请提供具有默认值的无参数构造函数。提供执行以下每个操作的公共方法:

     

a)添加两个有理数:添加的结果应以简化形式存储。将其实现为静态方法。

     

b)Subtracr两个有理数:减法的结果应该以简化形式存储。将其实现为静态方法。

     

c)将两个有理数相乘:乘法的结果应以简化形式存储。将其实现为静态方法。

     

d)划分两个有理数:划分的结果应以简化形式存储。将其实现为静态方法。

     

e)以a / b的形式返回有理数的字符串表示,其中a是分子,b是分母。

     

f)以浮点格式返回Rational数字的String表示。 (考虑提供格式化功能,使类的用户能够指定小数点右侧的精度位数。)

1 个答案:

答案 0 :(得分:1)

这是你的班级

public class Rational {

    private static int gcd(int u, int v) {
        if (u == 0) {
            return v;
        } else if (v == 0) {
            return u;
        } else if (u == 1 || v == 1) {
            return 1;
        }
        int temp;
        while (v != 0) {
            temp = u % v;
            u = v;
            v = temp;
        }
        return u;
    }

    private static Rational reduce(Rational num) {
        int gcd = gcd(num.getNumerator(), num.getDenominator());
        return new Rational(num.getNumerator() / gcd, num.getDenominator() / gcd);
    }

    private static Rational neg(Rational num) {
        return new Rational(-(num.getNumerator()), num.getDenominator());
    }

    public static Rational add(Rational a, Rational b) {
        return reduce(new Rational(a.getNumerator() * b.getDenominator() + a.getDenominator() * b.getNumerator(), a.getDenominator() * b.getDenominator()));
    }

    public static Rational subtract(Rational a, Rational b) {
        return add(a, neg(b));
    }

    public static Rational multiply(Rational a, Rational b) {
        return reduce(new Rational(a.getNumerator() * b.getNumerator(), a.getDenominator() * b.getDenominator()));
    }

    public static Rational divide(Rational a, Rational b) {
        return multiply(a, new Rational(b.getDenominator(), b.getNumerator()));
    }

    public static String getString(Rational num) {
        return String.format("%d/%d", num.getNumerator(), num.getDenominator());
    }

    public static String getFloatString(Rational num) {
        return getFloatString(num, 6);
    }

    public static String getFloatString(Rational num, int fixedTo) {
        return String.format("%." + fixedTo + "f", num.getNumerator() / ((float) num.getDenominator()));
    }

    private final int numerator;
    private final int denominator;

    public Rational() {
        this(0, 1); // Note that division by zero is not allowed
    }

    public Rational(int numerator, int denominator) {
        if (denominator == 0) {
            throw new ArithmeticException("Division by zero");
        }
        this.numerator = numerator;
        this.denominator = denominator;
    }

    public int getNumerator() {
        return numerator;
    }

    public int getDenominator() {
        return denominator;
    }

}

根据您的需求进行定制。可能的解决方法:将float更改为double以获得更高的精确度。