有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

面向对象Java与分数

我试图将三个实例方法添加到类“Fraction”的公共接口中,结果都返回一个“Fraction”:

加、减、乘。是否可以将其从当前代码更改为实例方法

我就是不能让它工作

这是我的密码:

class Fraction {
    private Integer numerator;
    private Integer denumerator;

    public Fraction(Integer numerator, Integer denumerator) {

        int gcd = 1;

        for (int i = 1; i <= numerator && i <= denumerator; i++) {
            if (numerator % i == 0 && denumerator % i == 0)
                gcd = i;
        }
        this.numerator = numerator / gcd;
        this.denumerator = denumerator / gcd;
    }

    public Fraction(Integer numerator) {
        this.numerator = numerator;
        this.denumerator = 1;
    }

    public String toString() {

        return numerator + "/" + denumerator;
    }



    public static Fraction add(Fraction f1,Fraction f2){
        return new Fraction(f1.numerator*f2.denumerator+f2.numerator*f1.denumerator,f1.denumerator*f2.denumerator);
    }
    public static Fraction subtract(Fraction f1,Fraction f2){
        return new Fraction(f1.numerator*f2.denumerator-f2.numerator*f1.denumerator,f1.denumerator*f2.denumerator);
    }
    public static Fraction mul(Fraction f1,Fraction f2){
        return new Fraction(f1.numerator*f2.numerator,f1.denumerator*f2.denumerator);
    }
}

class Main
{
    public static void main(String[] arguments)
    {
        final Fraction HALF = new Fraction(1, 2);
        final Fraction THREE_FIFTH = new Fraction(3, 5);
        System.out.println(HALF.add(HALF, THREE_FIFTH).toString());
        System.out.println(THREE_FIFTH.subtract(HALF, THREE_FIFTH).toString());
        System.out.println(HALF.mul(HALF, THREE_FIFTH).toString());
    }
}

共 (1) 个答案

  1. # 1 楼答案

    public static Fraction add(Fraction f1,Fraction f2){
      return new Fraction(f1.numerator*f2.denumerator+f2.numerator*f1.denumerator,
                          f1.denumerator*f2.denumerator);
    }
    

    是一个类方法(因为static,它不需要一个实例来调用“on”)

    使其成为一个实例方法

    public Fraction add(Fraction other){
      return new Fraction(this.numerator*other.denumerator+other.numerator*this.denumerator,
                          this.denumerator*other.denumerator);
    }
    

    当然,您实际上不需要在那里写this,只是它们强调f1成为当前对象,而f2成为单个参数

    那你就可以把它当作

    Fraction HALF = new Fraction(1, 2);
    Fraction THREE_FIFTH = new Fraction(3, 5);
    System.out.println(HALF.add(THREE_FIFTH));
    

    不重复HALF(就像原始代码中的HALF.add(HALF,THREE_FIFTH)

    旁注:类方法(staticstuff)可以通过类的名称引用,您的原始代码将以Fraction.add(...)的形式进行更常规的调用:

    System.out.println(Fraction.add(HALF,THREE_FIFTH));
    

    System.out.println()知道它应该调用toString(),所以实际上您不需要自己去做)