【java面对对象】分数类型加减乘除运算的实现

/**作者:naru
 * 编写功能:分数类型的加减乘除实现
 * 本代码并不完美 之后可能会不断完善
 * 基本思路:利用最小公倍数和最大公约数实现分数的约分
 * 然后其他均为数学运算
 * 
 */

	class Fraction {
	private int denominator;
	private int numerator;
	
	Fraction(int numerator,int denominator ) {
		this.denominator = denominator;
		this.numerator = numerator;
	}
	Fraction(){
		this.denominator=0;
		this.numerator=0;
	}

	public boolean judge() {
		if (this.denominator == 0)
			return false;
		else
			return true;
	}

	public int gcd()// 最大公约数
	{
		int r;
		int tmp;
		int a, b;
		a =  this.numerator;
		b = this.denominator;
		if (b == 0)
			return 0;
		else {
			if (b < a) {
				tmp = b;
				b = a;
				a = tmp;
			}
			while (b != 0 && a != 0) {
				r = b % a;
				b = a;
				a = r;
			}
			return b;
		}
	}

	public int lcm(Fraction G)// 两个分数最小公倍数的求解
	{
		int Lcm = 0;
		int a, b;
		a = this.denominator;
		b = G.denominator;
		if (b == 0)
			Lcm = a;
		else if (a == 0)
			Lcm = b;
		else if (a == 0 && b == 0)
			return 0;
		else
			Lcm = a * b;
		return Lcm;
	}

	public String simpFrac() {//约分化简分数 分子为0的直接视为0
		if (this.judge()) {
			if (this.denominator != 0 && this.numerator != 0) {
				return "最简形式为:" + this.numerator / this.gcd() + "/" + this.denominator / this.gcd();
			} else if (this.numerator == 0 && this.denominator != 0) {
				return "0";
			}
		}

		else
		{};
		return "分数不存在";
		
	}
public String AddFraction(Fraction G, Fraction S)//分数加法
	{
		if (this.judge()||G.judge())
		{
			int Snumerator=0;
			int Sdenominator=0;
			int Lcm;
			Lcm = this.lcm( G);
			if ((this.denominator == G.denominator))//分母相同 直接相加
			{
				Sdenominator = G.denominator;
				Snumerator = this.numerator + G.numerator;
			}
			else if (Lcm == this.denominator || Lcm == G.denominator)//分子分母不相同 
				//求解F,G两分数的两分母的最小公倍数
				//最终加法的得到的分母即为Lcm
				//分子为通分后的
			{
				Sdenominator = Lcm;
				if (this.denominator < G.denominator)
					Snumerator = (this.denominator * this.numerator) + G.numerator;
				if (G.denominator < this.denominator)
					Snumerator = (G.numerator * G.denominator) + this.numerator;
			}
			else
			{
				Sdenominator = Lcm;
				Snumerator = this.numerator * (Lcm / this.denominator) + G.numerator * (Lcm / G.denominator);
			}
			S.denominator = Sdenominator;
			S.numerator = Snumerator;
			System.out.print( "分数相加后结果的");
			 return S.simpFrac();
			 
		}
		else
		{};
		return "分数不存在";
	}
public String SubFraction( Fraction G, Fraction S)//分数减法
{
	if (this.judge()||G.judge())
	{
		int Snumerator=0;
		int Sdenominator=0;
		int Lcm;
		int a = this.numerator;
		int b = this.denominator;
		int c = G.numerator;
		int d = G.denominator;
		Lcm = this.lcm( G);
		if ((b == d))
		{
			Sdenominator = d;
			Snumerator = a - c;
		}
		else if (Lcm == b || Lcm == d)
		{
			Sdenominator = Lcm;
			if (b < d)
				Snumerator = (a * b) - c;
			if (d < b)
				Snumerator = (c * d) - a;
		}
		else
		{
			Sdenominator = Lcm;
			Snumerator = a * (Lcm / b) - c * (Lcm / d);
		}
		S.denominator = Sdenominator;
		S.numerator = Snumerator;
		System.out.print( "分数相减后结果的");
		 return S.simpFrac();
		 
	}
	else
	{};
		 return "分数不存在";
}
public String MulFraction(Fraction G, Fraction S)//分数乘法
{
	if (this.judge()||G.judge())
	{
		int a = this.numerator;
		int b = this.denominator;
		int c = G.numerator;
		int d = G.denominator;
		int Snumerator=0;
		int Sdenominator=0;
		Sdenominator = b * d;
		Snumerator = a * c;
		S.denominator = Sdenominator;
		S.numerator = Snumerator;
		if (Sdenominator == 0)
			return "分数不存在";
		else if (Snumerator == 0)
			return "分数相乘结果为0";
		else
		{
			System.out.print( "相乘结果的");
			return S.simpFrac();
		}
		
	}
	else
	{};
		 return "分数不存在";
}
public String DivFraction( Fraction G, Fraction S)//分数除法
{
	if (this.judge()||G.judge())
	{
		int a = this.numerator;
		int b = this.denominator;
		int c = G.numerator;
		int d = G.denominator;
		int Snumerator;
		int Sdenominator;
		Sdenominator = b * c;
		Snumerator = a * d;
		S.denominator = Sdenominator;
		S.numerator = Snumerator;
		if (Sdenominator == 0)
			return "分数不存在" ;

		else if (Snumerator == 0)
			return "分数为0" ;
		else
		{
			System.out.print( "分数相除结果的");
			return S.simpFrac();
		}
		
	}
	else
	{};
		 return "分数不存在";
}
	


}
public class Frac_{
	public static void show() {
	Fraction F=new Fraction(1,0);
	Fraction G=new Fraction(2,7);
	Fraction S=new Fraction();
	System.out.println(F.simpFrac());
	System.out.println(G.simpFrac());
	System.out.println(F.AddFraction( G, S));
	System.out.println(F.SubFraction( G, S));
	System.out.println(F.DivFraction( G, S));
	System.out.println(F.MulFraction( G, S));
	Fraction A=new Fraction(0,0);
	Fraction B=new Fraction(0,0);
	Fraction C=new Fraction();
	System.out.println(A.simpFrac());
	System.out.println(B.simpFrac());
	System.out.println(A.AddFraction( B, C));
	System.out.println(A.SubFraction( B, C));
	System.out.println(A.DivFraction( B, C));
	System.out.println(A.MulFraction( B, C));
	Fraction D=new Fraction(0,22);
	Fraction E=new Fraction(78,45);
	Fraction H=new Fraction();
	System.out.println(D.simpFrac());
	System.out.println(E.simpFrac());
	System.out.println(D.AddFraction( E, H));
	System.out.println(D.SubFraction( E, H));
	System.out.println(D.DivFraction( E, H));
	System.out.println(D.MulFraction( E, H));
	Fraction L=new Fraction(114,114514);
	Fraction M=new Fraction(514,114514);
	Fraction N=new Fraction();
	System.out.println(L.simpFrac());
	System.out.println(M.simpFrac());
	System.out.println(L.AddFraction( M, N));
	System.out.println(L.SubFraction( M, N));
	System.out.println(L.DivFraction( M, N));
	System.out.println(L.MulFraction( M, N));
	Fraction O=new Fraction(615,1722);
	Fraction P=new Fraction(1107,1923);
	Fraction Q=new Fraction();
	System.out.println(O.simpFrac());
	System.out.println(P.simpFrac());
	System.out.println(O.AddFraction( P, Q));
	System.out.println(O.SubFraction( P, Q));
	System.out.println(O.DivFraction( P, Q));
	System.out.println(O.MulFraction( P, Q));
	
}
	public static void main(String[] args){
		show();
		
	}
}


/*
测试结果:
分数不存在
最简形式为:2/7
分数相加后结果的最简形式为:2/7
分数相减后结果的最简形式为:-2/7
分数不存在
分数不存在
分数不存在
分数不存在
分数不存在
分数不存在
分数不存在
分数不存在
0
最简形式为:26/15
分数相加后结果的最简形式为:26/15
分数相减后结果的最简形式为:-26/15
分数为0
分数相乘结果为0
最简形式为:57/57257
最简形式为:257/57257
分数相加后结果的最简形式为:314/57257
分数相减后结果的最简形式为:200/-57257
分数相除结果的最简形式为:57/257
相乘结果的最简形式为:14649/57138577
最简形式为:5/14
最简形式为:369/641
分数相加后结果的最简形式为:8371/8974
分数相减后结果的最简形式为:1961/-8974
分数相除结果的最简形式为:3205/5166
相乘结果的最简形式为:1845/8974
*/
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是java实现分数加减乘除运算的示例代码: 假分数类Fraction: ```java public class Fraction { private int numerator; // 分子 private int denominator; // 分母 // 构造函数 public Fraction(int numerator, int denominator) { if (denominator == 0) { throw new IllegalArgumentException("分母不能为0"); } int gcd = gcd(numerator, denominator); this.numerator = numerator / gcd; this.denominator = denominator / gcd; if (this.denominator < 0) { // 统一分母为正数 this.numerator = -this.numerator; this.denominator = -this.denominator; } } // 加法 public Fraction add(Fraction f) { int newNumerator = this.numerator * f.denominator + this.denominator * f.numerator; int newDenominator = this.denominator * f.denominator; return new Fraction(newNumerator, newDenominator); } // 减法 public Fraction subtract(Fraction f) { int newNumerator = this.numerator * f.denominator - this.denominator * f.numerator; int newDenominator = this.denominator * f.denominator; return new Fraction(newNumerator, newDenominator); } // 乘法 public Fraction multiply(Fraction f) { int newNumerator = this.numerator * f.numerator; int newDenominator = this.denominator * f.denominator; return new Fraction(newNumerator, newDenominator); } // 除法 public Fraction divide(Fraction f) { if (f.numerator == 0) { throw new IllegalArgumentException("除数不能为0"); } int newNumerator = this.numerator * f.denominator; int newDenominator = this.denominator * f.numerator; return new Fraction(newNumerator, newDenominator); } // 获取分子 public int getNumerator() { return numerator; } // 获取分母 public int getDenominator() { return denominator; } // 判断是否为整数 public boolean isInteger() { return numerator % denominator == 0; } // 转化为整数 public int toInteger() { return numerator / denominator; } // 转化为字符串 public String toString() { if (isInteger()) { return String.valueOf(toInteger()); } else { return String.format("%d/%d", numerator, denominator); } } // 获取最大公约数 private int gcd(int a, int b) { if (b == 0) { return a; } else { return gcd(b, a % b); } } } ``` 测试代码: ```java public class Main { public static void main(String[] args) { Fraction f1 = new Fraction(3, 4); Fraction f2 = new Fraction(1, 2); System.out.println(f1.add(f2)); // 输出5/4 System.out.println(f1.subtract(f2)); // 输出1/4 System.out.println(f1.multiply(f2)); // 输出3/8 System.out.println(f1.divide(f2)); // 输出3/2 } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值