Java 分数约化函数
我正在写一个做乘法、除法和减法运算的程序。当我测试reduce函数时,虽然它不工作,但返回0/1。它仅在第三类测试输出上测试reduce函数。下面是代码和输出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
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();