Java 分数约化函数

Java 分数约化函数,java,Java,我正在写一个做乘法、除法和减法运算的程序。当我测试reduce函数时,虽然它不工作,但返回0/1。它仅在第三类测试输出上测试reduce函数。下面是代码和输出 import java.util.*; import java.util.Scanner.*; class Fraction { protected int numerator, denominator; public static void main(String args[]) { Syst

我正在写一个做乘法、除法和减法运算的程序。当我测试reduce函数时,虽然它不工作,但返回0/1。它仅在第三类测试输出上测试reduce函数。下面是代码和输出

import java.util.*;
import java.util.Scanner.*;

class Fraction
{
    protected int numerator, denominator;

    public static void main(String args[])
    {
        System.out.println("Chp. 25 LAB 1");
        System.out.println();


//   main commands for testing first class Fraction

        Fraction f1 = new Fraction(2,4);
        System.out.println("numerator of fraction1 is  " + f1.getNum());
        System.out.println("denominator of fraction1 is  " + f1.getDen());
        f1.displayFraction();
        f1.alterFraction(3,6);
        f1.displayFraction();


//    main commands for testing second class FractionArithmetic

        f1 = new Fraction(2,4);
        Fraction f2 = new Fraction(4,6);

        FractionArithmetic f3 = new FractionArithmetic();
        f3.multFracts(f1, f2);
        f3.display();

        f3 = new FractionArithmetic();
        f3.divFracts(f1, f2);
        f3. display();


//    main commands for testing third class FractionOperations
System.out.println("THIRD CLASS TESTING");
        f1 = new Fraction(2,4);
        f2 = new Fraction(4,6);

        FractionOperations fract = new FractionOperations();
        fract.multFracts(f1, f2);
        fract.display();
        fract.reduce();
        fract.getFraction().displayFraction(); 

        fract = new FractionOperations();
        fract.divFracts(f1, f2);
        fract.display();
        fract.reduce();
        fract.getFraction().displayFraction();  
    }

    Fraction(int n, int d)
    {
        numerator = n;
        denominator = d;
    }
    public int getNum()
    {
        return numerator;
    }
    public int getDen()
    {
        return denominator;
    }
    public void alterFraction(int n, int d)
    {
        numerator = n;
        denominator = d;
    }
    public void displayFraction()
    {
        System.out.println("Fractioni = " + numerator + "/" + denominator);
    }
}

class FractionArithmetic
{   
    protected Fraction fraction;

    FractionArithmetic()
    {
        fraction = new Fraction(0, 1);
    }
    FractionArithmetic(int n, int d)
    {
        fraction = new Fraction(n, d);
    }
    public void multFracts(Fraction a, Fraction b)
    {
//      System.out.println(a.getNum() + " " + a.getDen() + " " + b.getNum() + " " + b.getDen());
        fraction.alterFraction(a.getNum() * b.getNum(), a.getDen() * b.getDen());
    }

    public void divFracts(Fraction a, Fraction b)
    {
        fraction.alterFraction(a.getNum() * b.getDen(), a.getDen() * b.getNum());
    }
    public void display()
    {
        System.out.println("The fraction below is an unreduced fraction");
        fraction.displayFraction();
    }
    public Fraction getFraction()
    {
        return fraction;
    }
}

class FractionOperations extends FractionArithmetic
{
    protected Fraction reducedFraction;

    FractionOperations()
    {
        reducedFraction = new Fraction(0, 1);
    }
    FractionOperations(int n, int d)
    {
        super(n, d);
        reducedFraction = new Fraction(n, d);
    }
    public void reduce()
    {
        int gcf = getGCF(reducedFraction.numerator, reducedFraction.denominator);
        fraction.alterFraction(reducedFraction.numerator / gcf, reducedFraction.denominator / gcf);
    }   
    private static int getGCF(int a, int b)
    {
        int gcf = 1;
        a = Math.abs(a);
        b = Math.abs(b);
        if(a > b)
        {
            int dummy = b;
            b = a;
            a = dummy;
        }
        for(int i = 1; i <= b; i++)
        {
            if(b % i == 0 && a % i == 0)
                gcf = i;
        }
        return gcf;
    }
    public void display()
    {
        super.display();
        fraction.displayFraction();
    }
    public Fraction getFraction()
    {
        return reducedFraction;
    }   
}




Chp. 25 LAB 1

numerator of fraction1 is  2
denominator of fraction1 is  4
Fractioni = 2/4
Fractioni = 3/6
The fraction below is an unreduced fraction
Fractioni = 8/24
The fraction below is an unreduced fraction
Fractioni = 12/16
THIRD CLASS TESTING
The fraction below is an unreduced fraction
Fractioni = 8/24
Fractioni = 8/24
Before the reducing, 0/1
reduced fraction :0/1
Fractioni = 0/1
The fraction below is an unreduced fraction
Fractioni = 12/16
Fractioni = 12/16
Fractioni = 0/1
import java.util.*;
导入java.util.Scanner.*;
类分数
{
保护整数分子、分母;
公共静态void main(字符串参数[])
{
系统输出打印号(“Chp.25实验室1”);
System.out.println();
//测试一级分数的主要命令
分数f1=新分数(2,4);
System.out.println(“fraction1的分子是”+f1.getNum());
System.out.println(“fraction1的分母是”+f1.getDen());
f1.显示分数();
f1.交替分数(3,6);
f1.显示分数();
//测试二级分馏算法的主要命令
f1=新分数(2,4);
分数f2=新分数(4,6);
分数算术f3=新分数算术();
f3.多重分形(f1,f2);
f3.display();
f3=新的分馏数学();
f3.分裂(f1,f2);
f3.display();
//测试三级压裂作业的主要命令
System.out.println(“三级测试”);
f1=新分数(2,4);
f2=新分数(4,6);
FractionOperations fract=新的FractionOperations();
多重分形(f1,f2);
fract.display();
fract.reduce();
fract.getFraction().displayFraction();
fract=新的FractionOperations();
分形(f1,f2);
fract.display();
fract.reduce();
fract.getFraction().displayFraction();
}
分数(整数n,整数d)
{
分子=n;
分母=d;
}
公共int getNum()
{
返回分子;
}
公共int getDen()
{
返回分母;
}
公共空隙率(整数n,整数d)
{
分子=n;
分母=d;
}
公共空间分数()
{
System.out.println(“Fractioni=“+分子+”/“+分母);
}
}
类分馏算术
{   
保护分数;
分数算术()
{
分数=新分数(0,1);
}
分数算术(整数n,整数d)
{
分数=新分数(n,d);
}
公共无效多重合同(a部分、b部分)
{
//System.out.println(a.getNum()+“”+a.getDen()+“”+b.getNum()+“”+b.getDen());
分数.alterFraction(a.getNum()*b.getNum(),a.getDen()*b.getDen());
}
公共空间分割(分数a、分数b)
{
alterFraction(a.getNum()*b.getDen(),a.getDen()*b.getNum());
}
公共空间显示()
{
System.out.println(“下面的分数是未减少的分数”);
分数。显示分数();
}
公共分数getFraction()
{
收益率;
}
}
类分形运算扩展了分馏算法
{
保护分数还原分数;
压裂作业()
{
还原分数=新分数(0,1);
}
分形运算(整数n,整数d)
{
super(n,d);
还原分数=新分数(n,d);
}
公共空间减少()
{
int gcf=getGCF(约化分数.分子,约化分数.分母);
分数。交替分数(约化分数。分子/gcf,约化分数。分母/gcf);
}   
私有静态intgetgcf(inta,intb)
{
int gcf=1;
a=数学abs(a);
b=数学abs(b);
如果(a>b)
{
int-dummy=b;
b=a;
a=假人;
}

对于(int i=1;i这是分式算术和分式运算给您的设计增加了不必要的复杂性的结果。进行加法、乘法等和reduce的方法应该是分式方法

我已通过实验将reduce添加到分数(并使GCF可见):

现在,例如

f2 = new Fraction(4,6);
f2.reduce();
f2.displayFraction();
效果很好

f2 = new Fraction(4,6);
f2.reduce();
f2.displayFraction();