加法、减法、乘法和;Java中分数除法(家庭作业)

加法、减法、乘法和;Java中分数除法(家庭作业),java,Java,我写了这段代码作为我在AP计算机科学课程中收到的作业的答案,我的老师让我重做这段代码,因为答案不起作用。我只能在我的机器上编译它,所以我依靠我的老师来了解现在产生的结果,如下所示。这项任务将在今晚午夜前完成,我的拖延者一直等到现在才在这里寻求帮助,但仍然非常感谢。此外,这是我第一次在这里,所以很抱歉,一些代码的格式不正确。谢谢你的帮助 结果ATM if a = 3/4 and b = 5/6 a.add(b) produces 35/24; This should be 19/12 a.sub

我写了这段代码作为我在AP计算机科学课程中收到的作业的答案,我的老师让我重做这段代码,因为答案不起作用。我只能在我的机器上编译它,所以我依靠我的老师来了解现在产生的结果,如下所示。这项任务将在今晚午夜前完成,我的拖延者一直等到现在才在这里寻求帮助,但仍然非常感谢。此外,这是我第一次在这里,所以很抱歉,一些代码的格式不正确。谢谢你的帮助

结果ATM

if a = 3/4 and b = 5/6

a.add(b) produces 35/24; This should be 19/12
a.subtract(b) produces 1/0; This should be -1/12
a.divide(b) produces 11/1; This should be 9/10
a.multiply(b) produces 6/-5; This should be 5/8
这是密码

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.TitledBorder;

class Fraction{
    private int numer;
    private int denom;
    private Fraction answer;

    //Definition
    public Fraction(int num, int den)
    {
        numer = num;
        denom = den;
        simplify();
    }


    //Simplify
    void simplify()
    {
        int gcd = findGCD(numer, denom);
        numer /= gcd;
        denom /= gcd;
    }


    //GCD Function
    int findGCD(int a, int b)
    { int temp;
        while(b != 0)
        {
            temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }


    //GetNumerator
    public int getNumer()
    {
        return numer;
    }

    //GetDenominator
    public int getDenom()
    {
        return denom;
    }

    //Fraction Add Method
    Fraction add(Fraction x)
    {
        Fraction answer;

        if(denom == x.denom)
        {
            answer = new Fraction(x.numer + numer, denom);
            }
        else
        {
          int den = denom * x.getDenom();
          int num = numer * x.getNumer();
          num += x.getNumer() * denom;
          answer = new Fraction(num, den);

        }
     return answer;
    }


    //Fraction Subtract Method
    Fraction subtract(Fraction x)
    {
        Fraction answer;

        if(x.denom == denom)
        {
            answer = new Fraction(numer - x.numer, denom);
        }
        else
        {
            int den = denom / x.getDenom();
            int num = numer / x.getNumer();
            num -= x.getNumer() * denom;
            answer = new Fraction(num, den);
        }
        return answer;
    }

    //Fraction Multiply Method
    Fraction multiply(Fraction x)
    {
        Fraction answer;

        if(x.denom == denom)
        {
            answer = new Fraction(numer + x.numer, denom);
        }
        else
        {
            int den = denom + x.getDenom();
            int num = numer + x.getNumer();
            num -= x.getNumer() * denom;
            answer = new Fraction(num, den);
        }
        return answer;
    }

    //Fraction Divide Method
    Fraction divide(Fraction x)
    {
        Fraction answer;

        if(x.denom == denom)
        {
            answer = new Fraction(numer - x.numer, denom);
        }
        else
        {
            int den = denom - x.getDenom();
            int num = numer - x.getNumer();
            num -= x.getNumer() * denom;
            answer = new Fraction(num, den);
        }
        return answer;
    }


    //@Override
    public boolean equals(Fraction x)  
    {
        boolean answer = false;

        if(numer == x.numer && denom == x.denom)
      {
            answer = true;
        }

        return answer;
    }


    //ToString
    public String toString()
    {
    return (Integer.toString(numer) + "/" +
             Integer.toString(denom));
    }


    //Main Method
    public void main(String[]args)
    {
        Fraction a = new Fraction(3,4);
        Fraction b = new Fraction(5,6);
        System.out.println(a.toString());
        System.out.println(b.toString());

        Fraction c = a.add(b);
        System.out.println(c.toString());

        c = a.subtract(b);
        System.out.println(c.toString());

        c = a.divide(b);
        System.out.println(c.toString());

        c = a.multiply(b);
        System.out.println(c.toString());





    }

}

所以只有一件事要开始:始终使用getDenom(),因为在代码中有时是getDenom,有时是denom So

对于add()方法: 如果名词是不同的,你就错了。 你必须做到:

denom = this.getDenom() * x.getDenom();
num = this.getNum() * x.getDenom() + x.getNumer() * this.getDenom();
//and check if simplification is possible.
return new Fraction(num,denom);
对于其他操作来说也是一样的。检查你乘以好的分母或分子,因为它似乎不是这样,不要忘记简化


希望它能有所帮助

好的,我不必为你的GUI操心,这里是你应该做的:

// Euclidean Algorithm
public int gcd(int a, int b)
{
    if (b==0) return a;
    return GCD(b,a%b);
}

void simplify()
{
    int gcd = gcd(numer, denom);
    numer /= gcd;
    denom /= gcd;
}

Fraction add(Fraction x)
{
    return new Fraction(numer * x.getDenom() + x.getNumer() * numer,
                        denom * x.getDenom();  
}
我猜是你的gcd功能。 和
正如所指出的那样,add的名称不正确

我完全支持帮助解决问题,但具体来说,您自己有什么困难?给我们一些具体的东西,人们会更倾向于帮助做家庭作业。你的数学错了。了解如何对分数执行这些操作并实现它们。目前它们没有任何意义。您必须添加中间打印语句以找出错误所在。我怀疑您的findGCD算法是错误的。您可能应该使用。谢谢您这么快的回复,这肯定是有帮助的,当然特别是添加了。我想我现在明白我的问题了,希望我能把它编译并运行起来。再次感谢你的帮助!就像计算gcd的递归一样。